在 SWT eclipse 插件上更新用户界面的最佳技术
Best technique to update user interface on SWT eclipse plugin
我正在为我自己的项目(Eclipse 基金会,使用 SWT)开发一个插件,但我遇到了以下问题。该插件在执行开始时会做很多工作,因此可能需要 2 或 3 分钟才能完成整个操作。我决定实现一个日志 window,这样我就可以检查进度和可能发生的任何错误。因此,当它完成他的工作时, window/frame 会在整个操作完成后填充所有信息。我自然而然地想到,由于它使用单个线程来完成所有操作,因此一旦线程结束操作,就会触发 "refresh interface" 事件。
有什么合适的或者"correct"的方法可以解决这个问题吗?我习惯于 Web 应用程序开发,而且我对 SWT 的一般知识知之甚少。我有一个想法,使用不同的线程来处理不同的操作,在需要时同步它们,但我不完全确定这是否可行,或者在独立应用程序的范围内是否有更好的方法。
感谢任何提示或提示!
所以最后我按照建议生成了一个使用 Display.getDefault().asyncExec() 操作的自定义作业。像这样的小样本有效:
Job synJob = Job.create("Synchronize Files", (ICoreRunnable) monitor -> {
for(String filePath : paths) {
//my operation that sync some files in workspace in a loop ...
//...
//now log some data, updating the UI
Display.getDefault().asyncExec(() -> {
//generates a text and appends it to a frame etc.
Label label = new Label(myFrame, 0);
//etc
});
}
});
synJob.schedule();
我正在为我自己的项目(Eclipse 基金会,使用 SWT)开发一个插件,但我遇到了以下问题。该插件在执行开始时会做很多工作,因此可能需要 2 或 3 分钟才能完成整个操作。我决定实现一个日志 window,这样我就可以检查进度和可能发生的任何错误。因此,当它完成他的工作时, window/frame 会在整个操作完成后填充所有信息。我自然而然地想到,由于它使用单个线程来完成所有操作,因此一旦线程结束操作,就会触发 "refresh interface" 事件。
有什么合适的或者"correct"的方法可以解决这个问题吗?我习惯于 Web 应用程序开发,而且我对 SWT 的一般知识知之甚少。我有一个想法,使用不同的线程来处理不同的操作,在需要时同步它们,但我不完全确定这是否可行,或者在独立应用程序的范围内是否有更好的方法。
感谢任何提示或提示!
所以最后我按照建议生成了一个使用 Display.getDefault().asyncExec() 操作的自定义作业。像这样的小样本有效:
Job synJob = Job.create("Synchronize Files", (ICoreRunnable) monitor -> {
for(String filePath : paths) {
//my operation that sync some files in workspace in a loop ...
//...
//now log some data, updating the UI
Display.getDefault().asyncExec(() -> {
//generates a text and appends it to a frame etc.
Label label = new Label(myFrame, 0);
//etc
});
}
});
synJob.schedule();