我有C#应用程序,必须处理长时间的工作。我有一些限制,因为我无法承担在后台线程中运行那么长的工作,例如我正在使用的一些com对象不能在后台线程中使用。如何在UI线程中处理这个长作业,并使用进度报告更新UI。
可以做些什么来在处理大工作时让UI响应?
提前致谢,
Bibek Dawadi
答案 0 :(得分:2)
您可以使用后台线程中的COM对象。只需确保后台线程也是STA线程。 (假设:COM对象本身就是一个STA对象)。
在Vista Aero及更高版本中,如果您没有足够快地绘制窗口,Windows将做出奇怪的决定。就像它一样,它将开始显示窗口内容的旧版本。如果您的窗口没有响应一秒或两秒的绘制消息,这将启动。
答案 1 :(得分:0)
如果该作业不是一个大阻塞调用,并且您正在使用WinForms,则可以在长时间运行的操作中调用Application.DoEvents()
。每次调用它时,UI都会更新(所有待处理的窗口消息都将被处理),因此请按照您希望UI响应的方式进行调用。