请看看我的问题: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