Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 后台工作人员不会报告进度_C#_Loops_Backgroundworker - Fatal编程技术网

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

C# 后台工作人员不会报告进度,c#,loops,backgroundworker,C#,Loops,Backgroundworker,我有一个不报告进度的后台工作人员。我需要得到一个精确的值,而不是百分比。我不确定如何对进度更改事件进行编码。我已将WorkReportsProgress属性设置为true。我对C语言还比较陌生,所以请原谅我知识贫乏 private void BKGWork_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; for

我有一个不报告进度的后台工作人员。我需要得到一个精确的值,而不是百分比。我不确定如何对进度更改事件进行编码。我已将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.
    }
使用worker.ReportProgress0,i;将显式值作为用户状态参数传递。Use可以在e.UserState中访问此项,将其转换为int

无论您传递给ReportProgress的是什么,因为第一个参数是您在e.ProgressPercentage中收到的值。BackgroundWorker类无法为您计算“百分比”。如果需要更复杂的数据,例如类的实例,可以使用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的输出窗口

我在控制台上什么也得不到。完全空白如果可以使用调试器,则在ProgressChanged事件内的行中放置断点并运行程序。如果未命中断点,请检查是否已在设计器或代码中正确设置事件处理程序。否则,如果命中断点,则在运行时您不会查看输出窗口。在非控制台应用程序中,控制台输出将重定向到Visual Studio的输出窗口。i未声明ProgressChanged事件的事件处理程序。愚蠢的我。谢谢你的提醒tho:尝试过这种方法,但仍然没有得到任何结果。控制台完全为空。是否已调用RunWorkerAsync来启动后台工作程序?你确定你的事件处理程序已经订阅了吗?我知道了,我没有声明ProgressChanged事件。你的方法有效。