C# backgroundWorker:ReportProgress未激发

C# backgroundWorker:ReportProgress未激发,c#,backgroundworker,C#,Backgroundworker,我想将进度条添加到我的“应用程序”中 加载过程中,启动进度表单backgroundworker的事件 private void ProgressForm_Load(object sender, EventArgs e) { backgroundWorker1.RunWorkerAsync(); } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { //some code

我想将进度条添加到我的“应用程序”中

加载过程中,启动进度表单backgroundworker的事件

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
好的,对不起,我找到了原因。我不知道为什么,但VS并没有将提到的方法/事件处理程序视为backgroundworker的事件。我转到属性->事件->在ProgressChanged上单击两次,它添加了新的事件处理程序:backgroundWorker1\u ProgressChanged\u 1

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

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

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

那么您确定它没有触发吗?或者百分比结果为0?它没有触发,我在backgroundWorker1\u ProgressChanged事件中设置了断点。因此,请检查
backgroundWorker1\u ProgressChanged
是否注册为ProgressChanged事件。并尝试从发件人而不是从跨线程backgroundWorker1对象报告。
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();
    }
}
// This event handler updates the progress bar. 
private void backgroundWorker1_ProgressChanged(object sender,
    ProgressChangedEventArgs e)
{
    this.progressBar1.Value = e.ProgressPercentage;
}