2009-10-21 64 views
0

定期我發現自己寫了一些實用程序,它們使用一些需要一段時間來處理的循環。然而,當循環進行時,表單不再刷新,因此如果要移動表單或將另一個窗口移動到其上並關閉,表單將保留爲空,直到循環結束。當我的程序使用後臺工作程序進行工作時,如何讓表單保持空白?

現在我知道處理這個問題的正確方法是使用後臺工作來在單獨的線程上執行耗時的任務。但是我還沒有完全掌握多線程技術。

所以,如果我只打算使用一個線程,每個循環最好做的事情是保持表單的內容是最新的。例如,表單中可能會有一個進度條。我見過並使用Form.Refresh(),Form.Update()和Application.DoEvents()的各種組合,但想知道處理這個問題的最佳方法是什麼?

回答

4

你可以在代碼中的不同位置使用Application.DoEvents()來僞造它,但是你真的應該把工作放在另一個線程中。

+0

同意。 'DoEvents'可能會產生棘手的副作用。 –

1

把它作爲進入線程的機會,你將不得不遲早。

Bgw使事情變得簡單:DoWork事件在另一個線程上運行,但ProgressChange和Completed在主線程上同步。

找到幾個examples,並且在DoWork中使用共享數據時要小心。

相關問題