Report progress inside for loop

早过忘川 提交于 2019-12-11 13:47:24

问题


I am calling this code inside a for loop and I need to do this since progress depends on this for loop value.

bgworker1.ReportProgress(k * count);

But I receive an exception:

this operation has already had operation completed called on it and further calls are illegal

How can I solve this??

Edit:

private void bgworker1_DoWork(object sender, DoWorkEventArgs e)
{
 for (k = 1; k <= tcount; k++)
 {
  bgworker1.ReportProgress(k * count);
 }
}

private void bgworker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        progressBar1.Value = e.ProgressPercentage;
    }

private void bgworker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        bgworker1.ReportProgress(k * count);
    }

回答1:


One way you can tackle this is reporting progress in a exclusive for-loop for this only task, like this

private void bgworker1_DoWork(object sender, DoWorkEventArgs e)
{
    BackgroundWorker worker = sender as BackgroundWorker;

    for (int i = 1; i <= 100; i++)
    {
        if (worker.CancellationPending == true)
        {
            e.Cancel = true;
            break;
        }
        else
        {
            //Insert your logic HERE
            worker.ReportProgress(i * 1);
        }
    }
}


来源:https://stackoverflow.com/questions/21676001/report-progress-inside-for-loop

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!