我写了一个简单的应用程序,使用BackgroundWorker将10万行“Hello World”添加到列表中。
以下是我的BackgroundWorker在单独的线程中执行的工作代码:
除了如果我去掉Thread.Sleep(1)后,BackgroundWorker就不再报告进度之外,一切都正常工作。(我想它需要一些时间)。暂停线程1毫秒实际上使BackgroundWorker报告进度,但速度非常慢。
以下是我的BackgroundWorker在单独的线程中执行的工作代码:
private void BgWorkerOnDoWork(object sender, DoWorkEventArgs doWorkEventArgs)
{
int min = 0;
foreach (var hw in hwList)
{
//new ManualResetEvent(false).WaitOne(1);
Thread.Sleep(1);
int progress = Convert.ToInt32((Double)min / hwList.Count * 100);
min++;
bgWorker.ReportProgress(progress);
}
}
// Updating the progress
private void BgWorkerOnProgressChanged(object sender, ProgressChangedEventArgs progressChangedEventArgs)
{
ProgressBar.Value = progressChangedEventArgs.ProgressPercentage;
}
除了如果我去掉Thread.Sleep(1)后,BackgroundWorker就不再报告进度之外,一切都正常工作。(我想它需要一些时间)。暂停线程1毫秒实际上使BackgroundWorker报告进度,但速度非常慢。
我的问题是,有没有办法摆脱线程睡眠,同时又能让BackgroundWorker正确地报告进度?
从我的理解来看,挂起BackgroundWorker是不可避免的,因为线程需要一些时间来执行任务,但我想知道是否有一个解决方法。