【发布时间】:2012-02-11 17:19:30
【问题描述】:
我最近开始使用多线程 Winform 应用程序,遇到了一个我不明白的问题。
基本上,当我尝试让后台工作人员报告其进度并且该进度来自计算时,它始终为零。
//making background worker
BackgroundWorker myJanitor = new BackgroundWorker();
myJanitor.WorkerSupportsCancellation = true;
myJanitor.WorkerReportsProgress = true;
myJanitor.DoWork += new DoWorkEventHandler(cleanContactList);
myJanitor.ProgressChanged += new ProgressChangedEventHandler(myCleaningWorker_ProgressChanged);
myJanitor.RunWorkerAsync();
“cleanContactList”方法循环遍历 DataGridView 的行,在此期间我尝试如下操作:
int percentComplete = (myRow.Index / contactGridView.Rows .Count ) * 100;
(sender as BackgroundWorker).ReportProgress(percentComplete);
令人沮丧的是,percentComplete 总是为零。如果我调试它,我可以看到发生了实际计算(例如 [2000/10000]*100),但结果始终为零。
我在这里缺少什么?如果我用 Random.Next(0,100) 替换计算,则称它更新正常。
【问题讨论】:
标签: c# .net winforms multithreading backgroundworker