【发布时间】:2019-10-23 21:14:44
【问题描述】:
我有一个后台进程(工厂),它创建更多后台进程(工人)来分担工作量。 我需要每个工人向工厂报告进度,工厂向 GUI 报告。 对于我可以使用的工厂
Factory.ReportProgress(value);
但我似乎无法从 DoWork 方法中引用我的工人。 我的工厂 DoWork:
private void Factory_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker[] Workers = new BackgroundWorker[ThreadCount];
for (int i = 0; i < ThreadCount; i++)
{
BackgroundWorker Worker = new BackgroundWorker();
Worker.WorkerReportsProgress = true;
Worker.WorkerSupportsCancellation = true;
Workers[i] = Worker;
Worker.DoWork += Worker_DoWork;
Worker.RunWorkerCompleted += Worker_RunWorkerCompleted;
Worker.ProgressChanged += Worker_ProgressChanged;
Worker.RunWorkerAsync(argument: TimesToRun);
Progress++;
Factory.ReportProgress(Progress);
}
}
我的工人 DoWork:
private void Worker_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i < (int)e.Argument; i++)
{
if (Running)
{
//Do work
Thread.Sleep(10);
}
}
}
如何让工人在每次完成 1 个 for 循环时向工厂报告进度?
【问题讨论】:
-
您需要使用
BackgroundWorker实例的.ReportProgress方法。该实例是object sender。参考BackgroundWorker DoWork Event -
效果很好。谢谢。
-
感谢您支持我的评论:D
-
对不起,我是新人,只有 6 个声望,您需要 15 个才能为 cmets 点赞。
-
我已将我的评论作为答案发布。
标签: c# backgroundworker