如何在UI线程上运行Progress Dialog并更新进度条

时间:2013-06-26 15:59:50

标签: java eclipse user-interface swt progress-bar

我有一个在向导结束时运行的进度对话框。必须在UI线程上完成需要花费大量时间的操作。是否有一些方法可以在操作过程中更新进度条?

谢谢,

2 个答案:

答案 0 :(得分:0)

您可以尝试dlg.paintAll(dlg.getGraphics());,但手动刷新的问题是,当您调用时,对话框仅在给定的intervalls下刷新。因此,当用户点击前面的某个其他窗口并想要稍后检查它进展到多远时,他将不会在下一次刷新发生之前看到它。

为什么不能在线程中执行代码?您将ProgressDialog创建为模态,然后启动工作线程,并在执行它之后,将进度设置为可见。你可以在线程中更新它,也可以在线程中关闭它。主线程将阻塞,直到工作人员完成并保持可见。

答案 1 :(得分:0)

  1. 在通话中设置fork参数以运行至false
  2. 继续“抽取”UI事件 - 有关详细信息,请参阅Display::readAndDispatch
  3. 你确定这应该在UI线程中完成吗?在大多数情况下,在非UI线程中使用Display::asyncExecDisplay::syncExec

    最终卸载UI内容要容易得多