c #opennetCF后台工作程序在100次迭代后停止

时间:2010-03-26 09:27:00

标签: c# backgroundworker opennetcf

我有一个后台工作程序在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迭代停止?

提前致谢。

2 个答案:

答案 0 :(得分:3)

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

来自Backgroundworker.ReportProgress的MSDN Library文章:

  

percentProgress
类型:   System.Int32

     

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

修正:

 bgWorker.ReportProgress(0, i);

答案 1 :(得分:0)

我试过这个(使用.Net 4)并且工作正常 - 当MessageBox出现时,标签显示299。但是我没有使用OpenNETCF类 - 也许它们有一些影响?如果将OpenNETCF.ComponentModel替换为System.ComponentModel

,您会得到相同的行为吗?