2010-03-26 5 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 이벤트 핸들러에 null이 아닌 경우 e.Error 값을 표시하십시오. Backgroundworker.ReportProgress에 대한 MSDN 라이브러리 기사에서

:

percentProgress
유형 : 선택 System.Int32

완료되면 백그라운드 작업의 0에서 100 퍼센트,.

은 수정 :

bgWorker.ReportProgress(0, i); 
+0

고마워요! 내 하루를 저장했습니다 :) – Ikky

0

나는 (. 넷 4를 사용하여) 이것을 시도했지만 잘 작동한다. MessageBox가 나타나면 레이블에 299가 표시된다. 그러나 나는 OpenNETCF 클래스를 사용하지 않고 있습니다. 어쩌면 효과가 있습니까? OpenNETCF.ComponentModelSystem.ComponentModel으로 바꾸어도 동일한 문제가 발생합니까?

+0

내가 .NET Compact Framework에서와 배경 노동자를 사용하고는 포함되어 있지 않습니다. – Ikky

관련 문제