我有一個程序可以完成一些可以持續幾分鐘的複製作業(通過File.Copy)。當用戶在此時將另一個窗口帶到前臺時,程序窗口變爲空白,因爲它不會自我重繪。C#窗口在繁忙時變爲空白 - >進度條?但是如何?
現在我想在屏幕中心的額外窗口中顯示ProgressBar,但該窗口也是空白的。
所以我在另一個線程啓動它並沒有幫助。
我很確定有人這樣做過,但我找不到工作示例。有任何想法嗎?
我有一個程序可以完成一些可以持續幾分鐘的複製作業(通過File.Copy)。當用戶在此時將另一個窗口帶到前臺時,程序窗口變爲空白,因爲它不會自我重繪。C#窗口在繁忙時變爲空白 - >進度條?但是如何?
現在我想在屏幕中心的額外窗口中顯示ProgressBar,但該窗口也是空白的。
所以我在另一個線程啓動它並沒有幫助。
我很確定有人這樣做過,但我找不到工作示例。有任何想法嗎?
在BackgroundWorker class的文檔中有一個很好的例子。
謝謝。這樣的事情太難以發現,如果你不知道你到底在找什麼......誰會認爲這是一個組件?^^ – ihavenoaccount
這就是爲什麼創建了stackoverflow)不客氣! – artplastika
您可以使用BackgroundWorker類。
看到這個answer.
ChrisF是正確的。您的長時間操作應該在BackgroundWorker線程中完成。您可以使用BackgroundWorker報告進度,並將其與表單上的進度欄掛鉤。
您需要使用BackgroundWorker
線程操作您的操作。還有其他方法可以對該操作進行線程化,但是這可能是最簡單的方法,並且會繼續在前臺執行消息泵,因此Windows不認爲您的應用程序已停止響應。
另一種選擇是使用Thread
,並使用Thread.Join
等待後臺任務來完成,因爲Thread.Join
也發送標準的消息泵的信息到Windows在等待。
在BackgroundWorkerThread中執行長時間運行的進程。 – ChrisF