2009-11-08 7 views
3

디렉토리에서 여러 파일을로드하려고하는데로드하는 동안 진행률 표시 줄 상태와 처리중인 파일을 표시하는 레이블이 표시됩니다. . 제대로 모든 것을 처리하는 순간 BackgroundWorker에서 컨트롤의 속성 변경 C#

private void FileWorker_DoWork(object sender, DoWorkEventArgs e) 
{ 
    for (int i = 0; i < Files.Length; i++) 
    { 
     Library.AddSong(Files[i]); 
     FileWorker.ReportProgress(i); 
    } 
} 

, 제대로 진행 표시 줄 상태,하지만 난 레이블의 텍스트 (lblfile.text)를 변경하려고 할 때 그것이 다른 스레드에서 컨트롤을 변경할 수 없습니다 말했다. Fileworker에서 lblfile.text의 텍스트를 변경하는 방법이 있습니까?

+0

레이블 컨트롤을 업데이트하는 코드는 어떻게 생깁니 까? –

답변

11

C. Ross says으로 Control.Invoke 메서드 패밀리를 직접 사용할 수 있지만 BackgroundWorker.ProgressChanged 이벤트를 처리하여 간접적으로 처리하는 것이 더 쉬울 수도 있고 더 관용적 일 수도 있습니다. 백그라운드 스레드에서 DoWork가 발생하는 동안 UI 스레드에서 ProgressChanged가 발생합니다. 따라서 ProgressChanged에서 텍스트를 업데이트 할 때 Invoke가 필요하지 않습니다.

또한 작업자 함수의 UI 종속성을 없애기 때문에 테스트가 더 쉬워집니다.

+0

전화하세요. 나는이 제한된 경우에 대해 더 나은 대답이라고 동의한다. –

+0

"쉬운 테스트"부분은 +1 –