我在run() - 作业方法中使用asyncExec()更新了我的eclipse rcp应用程序的gui。
Job job = new Job("The Job") {
@Override
protected IStatus run(IProgressMonitor monitor) {
try {
monitor.beginTask("", IProgressMonitor.UNKNOWN);
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
\\update gui
}
});
...
PlatformUI.getWorkbench().getProgressService().showInDialog(Display.getCurrent().getActiveShell(), job);
job.schedule();
我试图向用户显示使用进度监视器和showInDialog方法需要多长时间的指示,但我还希望在对话框出现之前的最初几分钟有一个忙碌的光标。在这种情况下,BusyIndicator如何工作?我还有一个问题,即我无法取消或退出进度对话框(取消按钮和退出按钮不会显示任何效果)。
答案 0 :(得分:1)
Job
不适合传递给这样的进度服务。
您应该致电job.schedule()
并让它运行。如果你打电话
job.setUser(true);
在安排作业之前,它会在几秒钟后显示自己的进度对话框。
您的工作应定期致电monitor.worked(1)
以更新进度监控器。作业应该调用monitor.isCanceled()
来检查取消按钮。
如果你的工作主要是做GUI工作,那么使用UIJob
在UI线程中运行整个工作(但这更有可能减慢用户界面)。