2011-01-20 53 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響應。