Eclipse 后台作业:在主线程中处理特定调用?
Eclipse Background Job: Process specific calls in the Main thread?
我已经在 Eclipse-Plugin 上工作了一段时间(我的第一个,一切都很新)。
现在我意识到我必须通过使用后台作业来添加线程,因为我不希望 GUI 在我的插件的长时间处理过程中被冻结。但是因为我在开始编码时没有考虑(或不知道)这一点,所以我有多个 GUI 访问散布在漫长的 运行 过程中,因此我不能简单地将它们放入工作中。
有什么方法可以让我在作业中使这些 GUI 访问在主线程中处理?否则我将不得不更改整个插件的结构,这需要做很多工作。
您可以使用 Display
asyncExec
或 syncExec
方法在作业的 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();
我已经在 Eclipse-Plugin 上工作了一段时间(我的第一个,一切都很新)。
现在我意识到我必须通过使用后台作业来添加线程,因为我不希望 GUI 在我的插件的长时间处理过程中被冻结。但是因为我在开始编码时没有考虑(或不知道)这一点,所以我有多个 GUI 访问散布在漫长的 运行 过程中,因此我不能简单地将它们放入工作中。
有什么方法可以让我在作业中使这些 GUI 访问在主线程中处理?否则我将不得不更改整个插件的结构,这需要做很多工作。
您可以使用 Display
asyncExec
或 syncExec
方法在作业的 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();