asyncExec事件何时开始?

时间:2009-05-01 15:07:52

标签: eclipse-rcp

我正在尝试创建一个用于开发插件的裸骨应用程序。我不需要工作台。

将显示title1对话框,但title2永远不会显示。

为了显示第二个,需要做些什么?

public class BareBonesApp extends AbstractApplication
{
    public Object start(IApplicationContext context) throws Exception
    {
        Display display = PlatformUI.createDisplay();

        MessageDialog.openWarning(null, "title1", "message1");

        display.asyncExec(new Runnable()
        {
            public void run()
            {
                MessageDialog.openWarning(null, "title2", "message2");
            }
        });

        return null;
    }
}

1 个答案:

答案 0 :(得分:3)

显示器有不同的队列,可以运行同步,异步或特定时间(Display.timerExec)的可运行程序。当Display.readAndDispatch调度了所有事件时,首先执行sync-queue中的runnables,然后清空async-queue,然后执行到期的timerExec runnables。

Display.syncExec和Display.asyncExec之间的唯一区别是syncExec方法等待Display线程执行runnable。 Display.asyncExec只是将runnable排队并继续。

因此,如果“title2”永远不会出现,我认为您的应用程序不会运行Display循环:

Display display = new Display(); // this thread should be the only one that creates a display instance
while (someCondition) {
  if (!display.readAndDispatch())
    display.sleep();
}