C#visual studio 2010后台工作者,报告进度

时间:2012-06-21 18:57:49

标签: c# visual-studio-2010 backgroundworker progress

嘿我试图让我的后台工作人员在我的表单中发送一个参数回到它的主线程。

在后台工作程序运行的方法中,我有这个

worker.ReportProgress(p);

p是正在运行的for循环中的变量

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        label6.Text = e.ToString();
    }

我正在尝试将此标签文本更改为p,因为后台工作程序将完成循环。

感谢您的帮助!! :)

4 个答案:

答案 0 :(得分:3)

ReportProgress有两个参数:

  1. ProgressPercentage(INTEGER)
  2. UserState(Object)
  3. 如果您不关心进度百分比,可以发送0而不使用它:

    worker.ReportProgress(0, p);
    

    或者您可以使用单个参数重载,发送进度百分比。

    在你的处理程序中,ProgressChangedEventArgs有一些你必须使用的属性。要获取进度百分比值,请将其作为

    进行访问
    myPercentLabel.Text = e.ProgressPercentage.ToString;
    

    要获取您的用户数据(p),您必须按以下方式访问它:

    label6.Text = e.UserState.ToString;
    

    要发送更复杂的数据,只要在处理程序中正确地投射,就可以在UserState中发送任何类型的对象或结构。在任何一种情况下,您都必须访问ProgressPercentage UserState的{​​{1}}属性。

答案 1 :(得分:1)

你可能会遇到一些问题。首先,如果后台工作程序中的循环相对较快,则值可能会变化太快,导致标签无法跟上。其次,标签可能不一定每次设置文本时立即刷新,因此它可能会跳过某些值。最后,我相信你真正想要的是e.UserState.ToString()而不仅仅是e.ToString();

答案 2 :(得分:1)

你必须通过

worker.ReportProgress((int)(p*100.0/loopMaxValue));

然后使用

label6.Text = e.ProgressPercentage.ToString();

而不是

label6.Text = e.ToString();

答案 3 :(得分:0)

我明白了!

这样做了......

    label6.Text = e.UserState.ToString();