Eclipse 后台作业:在主线程中处理特定调用?

Eclipse Background Job: Process specific calls in the Main thread?

我已经在 Eclipse-Plugin 上工作了一段时间(我的第一个,一切都很新)。

现在我意识到我必须通过使用后台作业来添加线程,因为我不希望 GUI 在我的插件的长时间处理过程中被冻结。但是因为我在开始编码时没有考虑(或不知道)这一点,所以我有多个 GUI 访问散布在漫长的 运行 过程中,因此我不能简单地将它们放入工作中。

有什么方法可以让我在作业中使这些 GUI 访问在主线程中处理?否则我将不得不更改整个插件的结构,这需要做很多工作。

您可以使用 Display asyncExecsyncExec 方法在作业的 UI 线程中 运行 一个 Runnable

Display.getDefault().asyncExec(runnable);

asyncExec 只是安排 运行nable 尽快到 运行。 syncExec 阻塞,直到 运行nable 执行完毕。

如果您使用的是 Java 8,则可以使用 lambda 作为 运行nable:

Display.getDefault().asyncExec(() -> { code });

如果你想做一些类似提示输入值的事情,使用 Runnable class 保存结果并使用 syncExec 到 运行 它:

class PromptRunnable implements Runnable
{
  private String result;

  public void run()
  { 
    result = .... some prompt dialog
  }

  String getResult()
  {
    return result;
  }
}

PromptRunnable doPrompt = new PromptRunnable();

Display.getDefault().syncExec(doPrompt);

String result = doPrompt.getResult();