0

我有一个后台工作人员在 100 次迭代后停止。像这样:

    BackgroundWorker bgWorker = new BackgroundWorker();
    bgWorker.WorkerReportsProgress = true;
    bgWorker.WorkerSupportsCancellation = true;

    bgWorker.DoWork += new OpenNETCF.ComponentModel.DoWorkEventHandler(this.bgWorker_DoWork);
    bgWorker.RunWorkerCompleted += new OpenNETCF.ComponentModel.RunWorkerCompletedEventHandler(this.bgWorker_RunWorkerCompleted);
    bgWorker.ProgressChanged += new OpenNETCF.ComponentModel.ProgressChangedEventHandler(this.bgWorker_ProgressChanged);


    private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
    {
            for(i=0; i<300; i++)
            {   
                bgWorker.ReportProgress(i, i);
            }

    }


    private void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        this.labelProgress.Text = e.UserState.ToString(); 
    }

    private void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        MessageBox.Show("finished loading...");
    }

发生的情况是 labelProgress 的值停止在 100,并且弹出消息框并显示“加载完成...”。

任何人都知道出了什么问题。为什么线程在 101 迭代处停止?

提前致谢。

4

2 回答 2

3

您的代码正在使 BGW 线程崩溃。如果 e.Error 不为 null,请确保在 RunWorkerCompleted 事件处理程序中显示它的值。

来自 Backgroundworker.ReportProgress 的 MSDN 库文章:

percentProgress
类型:System.Int32

后台操作完成的百分比,从 0 到 100。

使固定:

 bgWorker.ReportProgress(0, i);
于 2010-03-26T10:58:26.517 回答
0

我已经尝试过了(使用 .Net 4)并且效果很好 - 当 MessageBox 出现时,标签显示为 299。但是我没有使用这些OpenNETCF类 - 也许它们有一些效果?如果替换为 ,您会得到相同的行为OpenNETCF.ComponentModelSystem.ComponentModel

于 2010-03-26T10:02:17.277 回答