2013-08-21 47 views
0

編寫應該清理任何舊文件的應用程序的一部分,但其中一些是非常大的,所以我開始一些BackgroundWorkers做大部分工作。 我的問題是,如果我呼籲一個BackgroundWorker和應用程序退出FileInfo對象上調用file.Delete:BackgroundWorker和刪除大文件

  • 會發生什麼事該文件,是要在一個無效的狀態流連?
  • 應用程序是否掛起,或者BGWorker是否還活着?
  • 文件是否無效?
  • BackgroundWorker是在這種情況下使用的正確類嗎?
+0

我認爲後臺工作者是這種操作的正確選擇。我可能不能回答你所有的問題,但這裏有一些答案:沒有應用程序不會掛起作爲不同線程的後臺工作者運行。一旦後臺工作人員開始處理文件,我認爲它可能會進入無效狀態。你有沒有使用任務並行庫,它基本上做了同樣的事情,但以更簡單的方式。 – qamar

+0

如果你擔心你的應用程序意外退出,並且這些是一些真正大的文件,你可以創建一個公開刪除隊列的Windows服務。這實際上就是你的backgroundWorker包裝。如果你想刪除一個文件,你爲什麼擔心它會失效?或者你只是想確保它真的被刪除? – mrtig

+0

只是想確保它真的走了大多數。 我並不擔心它意外退出,但應用程序用戶可能選擇退出應用程序,不知道有文件被刪除。我想盡可能保持透明。 – Craig

回答

0

好的,爲了解決這個問題,我已經切換到使用線程對象。 這創建了一個前臺線程,應用程序不應該退出,直到所有前臺線程完成。

對不起,麻煩。

0

如果您只是希望應用程序線程等待文件被刪除,則可以使用BackgroundWorker與AutoResetEvent結合使用。這是在How to wait for a BackgroundWorker to cancel? 解釋(請注意,這個答案包含取消過額外信息)

這樣,你仍然有具有BackgroundWorker的暴露事件,如ProgressChanged和RunWorkerCompleted的優勢。

當然,創建前臺線程是另一種解決方法,它們阻止主線程直到退出。但可能不是最優雅的解決方案。