我有一個C#項目(.NET 3.5),它使用BackgroundWorker
來做一些事情。 這東西爲它執行的所有操作寫一個日誌文件。當完成BackgroundWorker
時,我需要檢索日誌文件中的一些信息。問題是 當RunWorkerCompleted
事件被觸發時,日誌文件仍然是空的。所以,如果我做到以下幾點:C#在BackgroundWorker後執行一些操作RunWorker完成完成
private void BackProgress_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
LoadLog();
}
的LoadLog
方法,會發現一個空的日誌。
我一直在調試應用程序,我發現日誌文件在RunWorkerCompleted
最後一個花括號被擊中的時刻不再是空的。我不知道如何在適當的時候加載日誌文件,因爲在RunWorkerAsync()
調用之後我立即執行的任何操作都會立即執行,並且BackgroundWorker
的工作仍然無法完成(再次爲空日誌)。
基本上我需要能夠在RunWorkerCompleted
方法達到其結束後調用LoadLog
。
你有什麼想法可以幫助我解決這個問題嗎?
感謝提前:)
你能向我們展示了'DoWork'處理程序是什麼樣子? – Caramiriel 2013-03-12 21:32:56
這幾乎聽起來像是一個日誌刷新問題,也許看看你正在使用的任何日誌系統,看看是否有刷新調用或自動刷新或什麼。 – WildCrustacean 2013-03-12 21:33:22
您可以將代碼放入工作線程中,您可以使用true/false標誌來指示工作線程何時完成。如果您仍然擁有該線程的句柄,則可以在嘗試讀取之前檢查該線程是否處於活動狀態。如果文件已打開,那麼它將被鎖定,您也可以檢查該文件。 – Sorceri 2013-03-12 21:33:32