阻止自定义SWT组件中的操作

时间:2015-02-10 08:25:04

标签: java multithreading concurrency swt

在自定义SWT组件中运行长操作的最佳方法是什么?

目标:我想使用SWT构建邮件状态指示器。基本上,它应该不断轮询服务并根据返回的状态标志显示图像(为简单起见,我们可以说MailState.NO_MAILSMailState.NEW_MAILS)。

问题:我知道我不应该在SWT GUI线程中运行阻塞操作。

那么让我的组件每隔x秒异步轮询服务或者(可能)使用阻塞Future而不使我的界面冻结的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以使用Display.timerExec在给定的毫秒数后运行Runnable

Display.getDefault().timerExec(millisec, runnable);

注意:runnable在用户界面线程中运行。

这不会重复,因此您需要再次致电timerExec以设置下一次运行。

如果您的任务将长时间阻止,则必须在单独的线程中运行它。您可以使用Display.asyncExec从该线程更新用户界面:

Display.getDefault().asyncExec(runnable);

其中runnableRunnable,将尽快在用户界面线程中执行。