Использование диспетчера с основным контуром 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())

```

Пока это прекрасно работает. Теперь к проблематичной части: мне нужно в какой-то момент выполнить SWT-код вне метода  `Main.run` .

Когда я использую ту же магию  `call()` , пока основной цикл работает, ничего не происходит, поскольку поток занят (асинхронный вызов, как показано выше, возвращает сразу, но никогда не выполняет какой-либо код, а блоки синхронного вызова навсегда).

Не следует ли  `display.readAndDispatch()`  обрабатывать эти вызовы? Есть ли способ, которым я могу выполнить код в этом потоке чистым способом (то есть, не создавая собственную очередь событий)?

Повторное выполнение этого материала внутри основного цикла было бы относительно простым, но я чувствую, что мне не хватает чего-то очень очевидного здесь.

Выяснилось это,  `display.asyncExec`  делает именно это.