Eclipse RCP:Display.getDefault().asyncExec 仍然阻止我的 GUI
我有一个简单的 viewPart,提供一些文本字段来输入硒测试的参数。填写这些字段后,用户可以开始测试,大约需要时间。需要 30-45 分钟运行。我希望我的 GUI 在测试期间保持活动状态,让用户有机会做其他事情。我需要一个进度监视器。
我尝试将硒测试放入包含 Display.getDefault().asyncExec 的作业中来运行它。但是我的 GUI 在显示繁忙指示符几秒钟后就冻结了。除了进度监视器之外,selenium 不会更新任何其他视图。
有没有其他方法可以确保该作业不会阻塞我的 GUI?
最好的, 米尔科
I have a simple viewPart offering some text fields to enter parameters for a selenium test. After filling out these fields the user may start the test which approx. needs 30-45 minutes to run. I want my GUI to be alive during this test giving users the chance to do other things. I need a progress monitor.
I tried to put the selenium test in a job containing Display.getDefault().asyncExec to run it. But my GUI freezes after some seconds giving the busyindicator. The selenium does not update any other view but the progress monitor.
Is there another way to ensure that the job wont block my GUI?
Best,
Mirco
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
(a)syncExec
中执行的所有内容都使用显示线程,因此会阻塞您的 UI,直到它返回。我建议您使用 Eclipse 作业。这将使用工作台已经提供的开箱即用的进度指示器。Everything executed in
(a)syncExec
is using the display thread and therefore blocking your UI until it returns. I suggest you use Eclipse Jobs. This will use the progress indicator that the workbench already offers out of the box.我建议将代码拆分为更新 UI 的代码和执行其他业务的代码。在单独的线程中执行所有操作,当您需要检索或设置 UI 的某些操作时,请使用“Display.getDefault().asyncExec”。
I would suggest to split your code into code that updates the UI and the code that executes other business. Execute all of it in a separate thread, and when you need to retrieve or set some action to the UI then use the "Display.getDefault().asyncExec".