2010-03-26 111 views
0

我有一个后台工作器,在100次迭代后停止。就像这样:c#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次迭代?

在此先感谢。

回答

3

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

从MSDN库文章Backgroundworker.ReportProgress:

percentProgress
类型: System.Int32

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

修复:

bgWorker.ReportProgress(0, i); 
+0

非常感谢! 你救了我的一天:) – Ikky 2010-03-26 11:41:15

0

我试过这个(使用.Net 4),它工作正常 - 当MessageBox出现时,标签显示299。但是我没有使用OpenNETCF类 - 也许它们有一些效果?如果用System.ComponentModel替换OpenNETCF.ComponentModel,你会得到相同的行为吗?

+0

我使用的.NET Compact Framework的和背景的工人不包括在内。 – Ikky 2010-03-26 10:16:31