【问题标题】:How to run Progress Dialog on UI thread and make the progress bar updated如何在 UI 线程上运行进度对话框并更新进度条
【发布时间】:2013-06-26 15:59:50
【问题描述】:

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

谢谢,

【问题讨论】:

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


    【解决方案1】:
    1. 在调用中设置fork参数以运行到false
    2. 继续“发送” UI 事件 - 详情请参阅 Display::readAndDispatch

    您确定这应该在 UI 线程中完成吗?在大多数情况下,在非 UI 线程中使用 Display::asyncExecDisplay::syncExec 最终卸载 UI 内容要容易得多

    【讨论】:

    • 非常感谢您的回答。是的,我确定我必须在 UI 线程上完成我的工作
    【解决方案2】:

    你可以试试dlg.paintAll(dlg.getGraphics());,但是手动刷新的问题是对话框只在给定的时间间隔刷新,当你调用它时。因此,当用户单击前面的某个其他窗口并想稍后检查它的进度时,他将在下一次刷新发生之前看到它。

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

    【讨论】:

      猜你喜欢
      • 2011-06-12
      • 1970-01-01
      • 2014-05-03
      • 1970-01-01
      • 1970-01-01
      • 2015-09-03
      • 2016-12-17
      • 1970-01-01
      相关资源
      最近更新 更多