backgroundWorker:ReportProgress不会触发

时间:2014-10-20 14:20:36

标签: c# backgroundworker

我想在我的“应用”中添加进度条。

ProgressForm progressForm = new ProgressForm();
progressForm.paths.path1= pathSource1;
progressForm.paths.path2 = pathSource2;
progressForm.paths.path3= pathSource3;
progressForm.paths.path4=path4;
progressForm.paths.path5 = path5;
progressForm.ShowDialog();

在加载事件进展期间,后台工作人员被解雇。

private void ProgressForm_Load(object sender, EventArgs e)
{
    backgroundWorker1.RunWorkerAsync();
}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{

    //some code
    backgroundWorker1.ReportProgress(1, "Loading Data From File");

    //some code
    backgroundWorker1.ReportProgress(0, "Loading Data From ...File");

    //some code
    backgroundWorker1.ReportProgress(10, "Loading Data From... File 2");

    //some code
    backgroundWorker1.ReportProgress(0, "hjhgjhgjfhgh");

    for (int i = 0; i < dataCollection.Count(); i++)
    {
        //some code
        backgroundWorker1.ReportProgress(((i+1) / data1.Count())*100, "");
        //some code
    }
}

WorkerReportsProgress设置为true,不幸的是ReportProgress方法没有触发事件ProgressChange(我在那里设置断点)

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    if (e.ProgressPercentage!=0)
    {
        progressBar.Value = e.ProgressPercentage;
    }
    if (e.UserState.ToString()!="")
    {
        lblProgressDesc.Text = e.UserState.ToString();
    }
}

可能是什么原因?

4 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

以下代码示例演示如何使用ProgressChanged事件向用户报告异步操作的进度。此代码示例是为BackgroundWorker类提供的更大示例的一部分。

// This event handler updates the progress bar. 
private void backgroundWorker1_ProgressChanged(object sender,
    ProgressChangedEventArgs e)
{
    this.progressBar1.Value = e.ProgressPercentage;
}

答案 2 :(得分:0)

我遇到了类似的问题,其中ProgressChanged和RunWorkerCompleted事件没有触发。我从UI线程启动RunWorkerAsync进程,然后坐在睡眠循环中,等待IsBusy标志更改。原来,我需要在循环中添加一个Application.DoEvents,以便事件触发。

答案 3 :(得分:-1)

好的,对不起,我找到了原因。我不是为什么,但VS没有把提到的方法/事件处理程序视为backgroundworker的事件。我去了物业 - &gt;事件 - &gt;在ProgressChanged上单击两次并添加了新的事件处理程序:backgroundWorker1_ProgressChanged_1