【问题标题】:How report progress of background workers in an array [duplicate]如何报告数组中后台工作人员的进度[重复]
【发布时间】: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


【解决方案1】:

您可以通过在DoWork 方法内调用BackgroundWorker 实例的ReportProgress 方法来报告进度。活动的 BackgroundWorker 实例是 object sender 参数。

private void Worker_DoWork(object sender, DoWorkEventArgs e)
{
    // Get the BackgroundWorker that raised this event.
    BackgroundWorker worker = sender as BackgroundWorker;

    for (int i = 0; i < (int)e.Argument; i++)
    {
        if (Running)
        {
            //Do work
            Thread.Sleep(10);  
            //Report Progress
            worker.ReportProgress(i);
        }
    }
}

请参阅微软网站上的文档:BackgroundWorker DoWork Event

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多