2011-01-20 36 views
1

我有C#应用程序必须处理长时间工作。我有一些限制,因为我不能在后台线程中为例如我使用的一些com对象不能在后台线程中使用。我怎样才能在UI线程中处理这个长时间的工作,并通过进度报告更新UI。在UI线程上运行长进程并仍然更新UI以报告进度

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

由于提前,

Bibek Dawadi

+0

COM/STA意味着你不能使用ThreadPool。但是你可以创建裸线程,并让它们成为bg。 – 2011-01-20 22:37:00

回答

2

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

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

0

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

相关问题