2010-03-26 56 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