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

Blocking operation in custom SWT component

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

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

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

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

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

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

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

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

如果您的任务将阻塞很长时间,您将不得不 运行 在单独的线程中处理它。您可以使用 Display.asyncExec 从该线程更新用户界面:

Display.getDefault().asyncExec(runnable);

其中 runnable 是将尽快在用户界面线程中执行的 Runnable