C# 后台工作人员不会报告进度
我有一个不报告进度的后台工作人员。我需要得到一个精确的值,而不是百分比。我不确定如何对进度更改事件进行编码。我已将WorkReportsProgress属性设置为true。我对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
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事件。你的方法有效。