在自定义SWT组件中运行长操作的最佳方法是什么?
目标:我想使用SWT构建邮件状态指示器。基本上,它应该不断轮询服务并根据返回的状态标志显示图像(为简单起见,我们可以说MailState.NO_MAILS
或MailState.NEW_MAILS
)。
问题:我知道我不应该在SWT GUI线程中运行阻塞操作。
那么让我的组件每隔x秒异步轮询服务或者(可能)使用阻塞Future
而不使我的界面冻结的最佳方法是什么?
答案 0 :(得分:0)
您可以使用Display.timerExec
在给定的毫秒数后运行Runnable
:
Display.getDefault().timerExec(millisec, runnable);
注意:runnable在用户界面线程中运行。
这不会重复,因此您需要再次致电timerExec
以设置下一次运行。
如果您的任务将长时间阻止,则必须在单独的线程中运行它。您可以使用Display.asyncExec
从该线程更新用户界面:
Display.getDefault().asyncExec(runnable);
其中runnable
是Runnable
,将尽快在用户界面线程中执行。