請看看我的問題:C#Backgroundworker數據無效 - 線程問題?
我開發的邏輯會運行很長一段時間。在運行邏輯時,我想將狀態報告給進度條。大!所以我用後臺工作者:
_backgroundWorker = new BackgroundWorker();
_backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork);
_backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker_ProgressChanged);
_backgroundWorker.WorkerReportsProgress = true;
_backgroundWorker.RunWorkerAsync();
在backgroundWorker_Dowork,我有邏輯工作。我還聲明,被調用每50ms報告狀態計時器(內backgroundWorker_DoWork):
timer.Elapsed += (senderr, ee) => timer_Elapsed();
_timer.Interval = 50;
內timer_Elapsed,我更新通過調用UI控件_backgroundWorker.ReportProgress(0);我在BackgroundWorker_DoWork內部不會調用ReportProgress的原因是因爲雖然我的代碼需要一段時間,但我用來完成我的工作的while循環非常快。如果我在while循環結束時調用ReportProgres,則會出現相同的非響應類型的UI問題。
現在我的問題是處理少量數據時,調用timer_Elapsed時,所有的變量和數據都是0和null。我似乎無法弄清楚爲什麼..我有多線程編程豐富的經驗,但C#掩蓋了一切,我不知道哪個線程有什麼數據...
然後定時器在backgroundWorker_DoWork內插入後長運行邏輯完成。
關於爲什麼這些數據無效的任何想法?任何暗示將不勝感激。
DoWork調用的任何東西(包括事件觸發)在運行BackgroundWorker的線程上處理。你可以發佈你的代碼timer_Elapsed? – JNYRanger