2011-08-19 50 views
8

我有一個程序可以完成一些可以持續幾分鐘的複製作業(通過File.Copy)。當用戶在此時將另一個窗口帶到前臺時,程序窗口變爲空白,因爲它不會自我重繪。C#窗口在繁忙時變爲空白 - >進度條?但是如何?

現在我想在屏幕中心的額外窗口中顯示ProgressBar,但該窗口也是空白的。

所以我在另一個線程啓動它並沒有幫助。

我很確定有人這樣做過,但我找不到工作示例。有任何想法嗎?

+3

在BackgroundWorkerThread中執行長時間運行的進程。 – ChrisF

回答

4

BackgroundWorker class的文檔中有一個很好的例子。

+0

謝謝。這樣的事情太難以發現,如果你不知道你到底在找什麼......誰會認爲這是一個組件?^^ – ihavenoaccount

+0

這就是爲什麼創建了stackoverflow)不客氣! – artplastika

0

您可以使用BackgroundWorker類。

看到這個answer.

0

ChrisF是正確的。您的長時間操作應該在BackgroundWorker線程中完成。您可以使用BackgroundWorker報告進度,並將其與表單上的進度欄掛鉤。

0

您需要使用BackgroundWorker線程操作您的操作。還有其他方法可以對該操作進行線程化,但是這可能是最簡單的方法,並且會繼續在前臺執行消息泵,因此Windows不認爲您的應用程序已停止響應。

另一種選擇是使用Thread,並使用Thread.Join等待後臺任務來完成,因爲Thread.Join也發送標準的消息泵的信息到Windows在等待。