2010-08-02 5 views
2

루프가 포함 된 백그라운드 작업자 스레드가 있습니다. 매 반복마다 사용자에게 무슨 일이 일어나는지에 대한 로그를 보여주는 텍스트 상자를 업데이트하고 싶습니다. 예를 들어, 사용자가 헤드 라인 200 개 사이트를 폐기 한 경우는 말할 것입니다 :ReportProgress C# 질문

긁힌가 긁힌 site2.net이 긁힌가

내가 볼 수있는 유일한 일을 site3.net site1.net 즉이 reportProgress입니다 않습니다, 정수 만 제외합니다. 비율을보고 할 용도가 없습니다. 반복마다 이벤트를 발생시키고 싶습니다.

이것이 가능합니까?

답변

1

DoWorkEventArgs 클래스에는 "object"유형의 "Argument"속성이있어 원하는 모든 것을 배경 작업자에게 전달하는 데 사용할 수 있습니다.

뷰 모델이나 다른 바인딩 소스에서 스레드 안전 문자열 속성을 정의한 다음 인수로 전달할 수 있습니다. WPF 또는 실버 라이트를 사용하는 경우 BackgroundWorker가이를 업데이트하고 UI를 바인딩을 통해 업데이트하거나 WPF 디스패처를 통해 업데이트 할 수 있습니다.

+0

아 더 나도 사용하지 않는. 데스크톱 응용 프로그램을 사용하고 있습니다. –

3

두 번째 오버로드를 대신 사용하십시오. percentProgress를 0으로 설정하고 userState를 사이트의 문자열 또는 문자열 []로 설정합니다.

myBackgroundWorker.ReportProgress(int percentProgress, object userState); 

예 :

private void myBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) 
    { 
     // Set your sites dynamically here. 

     string[] sites = new string[] 
     { 
      "Test.com", 
      "Example.net", 
      "Google.com" 
     }; 

     myBackgroundWorker.ReportProgress(0, sites); 
    } 

    private void myBackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) 
    { 
     string[] sites = (string[])e.UserState; 

     // Enjoy your string array. 
    }