【发布时间】:2019-11-06 09:37:33
【问题描述】:
问题 我使用了来自https://github.com/zaagan/BioMetrix 的项目,并希望使用 BackgroundWorker 在长时间任务中显示进度(例如:获取日志数据大约需要 30 秒)
到目前为止我做了什么 1- 从工具箱中添加了 backgroundWorker1 2- 在 InitializeComponent() 之后,我添加了:
backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.WorkerSupportsCancellation = true;
3- 添加了这些功能:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
for (int i = 1; i <= 10; i++)
{
if (worker.CancellationPending == true)
{
e.Cancel = true;
break;
}
else
{
System.Threading.Thread.Sleep(500);
worker.ReportProgress(i * 10);
}
}
}
private void backgroundWorker1_ProgressChanged(object sender,
ProgressChangedEventArgs e)
{
this.Text = (e.ProgressPercentage.ToString() + "%");
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled == true)
{
this.Text = "Canceled!";
}
else if (e.Error != null)
{
this.Text = "Error: " + e.Error.Message;
}
else
{
this.Text = "Done!";
}
}
我希望在从设备检索日志数据时查看主标题文本上的进度百分比。
【问题讨论】:
-
我不鼓励使用 BGW。请改用 Task.Run 和
IProgress。 -
我不能说得比 Stephen C 本人更好:Task.Run vs BackgroundWorker 尤其是那个系列:Reporting Progress
-
“我希望在主标题文本上查看进度百分比”你得到了什么?
-
@Fildor 感谢您将我指向 Task.Run,顺便说一句,在操作完成之前,我没有得到预期的标题百分比 UI 被冻结
标签: c# multithreading backgroundworker