后台工作人员不会报告进度

时间:2016-08-14 07:29:30

标签: c# loops backgroundworker

我有一名Backrgound工作人员,不会报告进度。我需要得到一个确切的值,而不是百分比。我不确定如何编码进度改变事件。我已将WorkReportsProgress属性设置为true。我对C#还是比较新的,所以请原谅我的知识不足。

 private void BKGWork_DoWork(object sender, DoWorkEventArgs e)
    {
        BackgroundWorker worker = sender as BackgroundWorker;
        for (int i = 1; i <= 20; i++)
        {
           //do work
           worker.ReportProgress(i);
        }
    }
 private void BKGWork_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {  
      //not sure how to get the exact value of i and compare it to see which loop the background worker is in.
    }

2 个答案:

答案 0 :(得分:2)

无论您传递给ReportProgress的第一个参数是您在e.ProgressPercentage中收到的值,BackgroundWorker类都无法计算百分比&#39;为了你。如果您需要更复杂的数据(例如,类的实例,您可以使用ReportProgress的第二个可选参数并在UserState参数中检索它

private void BKGWork_DoWork(object sender, DoWorkEventArgs e)
{
    BackgroundWorker worker = sender as BackgroundWorker;
    for (int i = 1; i <= 20; i++)
    {
       //do work
       worker.ReportProgress(i);
    }
}
private void BKGWork_ProgressChanged(object sender, ProgressChangedEventArgs e)
{  
    // This is the value of the variable i passed above
    Console.WriteLine(e.ProgressPercentage);
}

根据您在下面的评论,似乎您没有正确设置事件处理程序。如果您可以使用调试器,这很容易发现。在ProgressChanged事件内的行中放置一个断点(F9)并运行程序(F5)。如果未触发断点,请检查您是否在设计器或代码中正确设置了事件处理程序。否则,如果遇到断点,则查看Visual Studio的输出窗口(在运行时,在非控制台应用程序中,控制台输出被重定向到Visual Studio的“输出”窗口)

答案 1 :(得分:1)

使用worker.ReportProgress(0,i);将显式值作为用户状态参数传递。使用可以在e.UserState中将其转换为int