2010-06-28 10 views
2

내 응용 프로그램은 C# Windows 양식 응용 프로그램입니다. 사용자가 버튼을 누르면 내 응용 프로그램이 새 스레드를 생성합니다 "생성"과정이레이블 및 진행률 막대

Loop counter = 1 to N 
    progressbar = counter/N 
    Display msg on label1 
    Do some tasks 
Loop 
progressbar = 100% 
Display msg on lable1 

내 processbar 및 레이블 MSG를 위임했습니다 다음이 의사 코드 같은 것을가는 새로운 프로세스를 실행 메시지가 나타난다 그것은 아무 문제없이 루프 내에있는 경우에도 내 마지막 메시지가 나타나지 않지만 레이블 텍스트가 변경 될 때마다 Application.DoEvents()를 실행하는 이벤트를 추가했습니다. 마지막으로 Application.DoEvents()를 배치하려고했습니다. msg 레이블, 그러나 해결책은 없습니다. 누구든지 전에이 문제가 발생 했습니까?

도움을 주신 모든 분들께 감사드립니다.

편집

이 내 마지막 MSG (루프 후 하나) 고정

 this.BeginInvoke((MethodInvoker)delegate() 
     { 
      toolStripProgressBar1.Value = 100; 
      btnCancel.Enabled = false; 
      btnBrowse.Enabled = true; 
      btnSaveTo.Enabled = true; 
      btnGenerate.Enabled = false; 
      // Performance testing 
      lblGeneratingInfo.Text = "Generation Complete! Total Run time: " + DateTime.Now.Subtract(startDate).ToString(); 
     }); 

코딩하는 방법입니다 : 내가 표시하려 텍스트 너무 긴 있으리라 믿고있어 을 ... "실행 완료 : 총 실행 시간"을 "실행 시간 :"으로 바꾼 경우 o_o

답변

1

이 모든 것이 새로운 스레드에서 발생한다고 언급했습니다. 그러나 DoEvents도 언급합니다. 나에게 이것은 작업자 스레드에서 UI를 업데이트하는 것이 좋습니다. 다른 하나는 작업자 스레드에서 실행 중이지만 문제인 UI 스레드를 차단하는 것입니다.

당신은 UI 스레드에서 자동으로 업데이트하는 UI를 요청해야한다 - 다음 필요DoEvents하지 않습니다 : 내가 얻을 수없는 경우 링크에 대한

/* on worker thread */ 
string text = ... 
int progress = ... 
this.Invoke((MethodInvoker)delegate { /* on UI thread */ 
    label1.Text = text; 
    progressBar.Value = progress; 
}); 
/* on worker thread */ 
+0

조언을 주셔서 고마워, 나는 변경된 텍스트에 대한 Application.DoEvents()를 꺼냈다, 모든 것이 여전히 새로운 스레드에서 잘 실행되지만, 마지막 메시지는 여전히 나타나지 않는다. 다른 모든 메시지 완전히 위로 shwos – ChickSentMeHighE

+0

@MikeAbyss - 당신은 레이블을 볼 수 있습니까? 거기에 어떤 것이 * 나타나는지 분명하지 않습니다 ... –

+0

예 레이블이 항상 보이고 코드가 가시성을 변경하지 않거나 마지막 메시지가 "Generation Complete!"로 표시되어야합니다 총 실행 시간 [시간 프로세스를 완료하는 데 걸렸습니다] ". 원래 레이블이있는 상태 표시 줄이 있었지만이 레이블은 텍스트를 업데이트하고 표시 할 때 아무런 문제가 없었습니다. 그러나 상태 표시 줄에 진행률 표시 줄을 추가하면이 문제가 발생하기 시작했습니다. 감사! – ChickSentMeHighE

2

ReportProgress()를 사용하여 진행 상황을 알 수있는 BackgroundWorker를 사용할 수 있습니다.

만 ReportProgress 호출 방법()에서 발생해야하는 UI를 업데이트이 backgroundWorker Tutorial

를 살펴 보자.

+0

감사합니다, 나는 배경 작업자을 시도 할 것이다 내 현재 하나의 작업 – ChickSentMeHighE

관련 문제