使用Dispatch和SWT的主循环

我的java/jython应用程序运行一个'默认'SWT主循环,如下所示:

while not shell.isDisposed():
    if not display.readAndDispatch():
        display.sleep()

在Mac OS X上,所有与SWT相关的代码都需要在主线程中运行,如下所示:

from com.apple.concurrent import Dispatch

call = Dispatch.getInstance().getNonBlockingMainQueueExecutor().execute

class Main(Runnable):
    def run(self):
        # main loop here

call(Main())

到目前为止这个工作正常。现在问题部分:我需要在某个时间点从 Main.run 方法之外执行与SWT相关的代码。

当我在主循环运行时使用相同的 call()魔法时,由于线程忙,所以没有任何反应(如上所示的异步调用立即返回,但从不执行任何代码和同步调用块永远)。

不应该 display.readAndDispatch()实际处理这些调用吗?有没有办法可以干净的方式在这个线程上执行代码(也就是说,没有构建我自己的事件队列)?

在主循环中重新实现这些东西会相对容易,但我觉得我错过了一些非常明显的东西。

1

1 答案

想出这个, display.asyncExec 就是这么做的。

0
额外