【问题标题】:Running Long Process on UI Thread and still update UI to report the progress在 UI 线程上运行长进程并仍然更新 UI 以报告进度
【发布时间】:2011-06-12 18:28:30
【问题描述】:

我有 C# 应用程序,它必须处理长时间的工作。我有一些限制,因为我无法在后台线程中运行那个长时间的工作,例如我正在使用的一些 com 对象不能在后台线程中使用。如何在 UI 线程中处理这个漫长的工作并使用进度报告更新 UI。

可以做些什么来让 UI 在处理大型工作时做出响应?

提前致谢,

比贝克·达瓦迪

【问题讨论】:

  • COM/STA 表示您不能使用线程池。但是你可以创建裸线程,并将它们设为 bg。

标签: c# multithreading user-interface main


【解决方案1】:

您可以使用来自后台线程的 COM 对象。只要确保后台线程也是一个 STA 线程。 (假设:COM 对象本身就是一个 STA 对象)。

在 Vista Aero 及更高版本上,如果您没有足够快地绘制窗口,Windows 会做出奇怪的决定。像这样它将开始显示旧版本的窗口内容。如果您的窗口在一两秒钟内没有响应绘制消息,这将开始。

【讨论】:

    【解决方案2】:

    如果该作业不是一个大的阻塞调用,并且您使用的是 WinForms,则可以在长期运行的操作中调用 Application.DoEvents()。每次调用它时,UI 都会更新(所有待处理的窗口消息都将被处理),因此只要您希望 UI 响应,就尽可能频繁地调用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 2018-07-16
      相关资源
      最近更新 更多