后台工作人员不会报告进度
本文关键字:报告 工作人员 后台 | 更新日期: 2023-09-27 18:02:16
我有一个后台工作人员不会报告进度。我需要得到一个精确的值,而不是百分比。我不知道如何编写进度更改事件。我已经将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.
}
无论您传递给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的输出窗口)
使用worker.ReportProgress(0,i);
传递您的显式值作为用户状态参数。用户可以在e.UserState
中访问它,将其转换为int