본문 바로가기

프로그래밍 언어 노트/C#

크로스 쓰레드 문제해결하기 (컨트롤 제어하기)

윈폼이나 WPF 에서 TextBox, ListView, Label 과 같은 컨트롤을 다른 스레드에서 접근하거나 변경하면

UI 쓰레드에 반영이되거나 Cross Thread Exception 이 발생한다.

 

Invoke (BeginInvoke)나 BackgroundWorker를 사용해야한다.

Invoke는 폼이나 컨트롤은 다 가지고 있다.

Invoke에 람다식을 넣어도 무방

-> 버전이 낮으면 람다식이 안되는듯, new MethodInvoker(() => {  }) 같이 Method Invoker 를 넣어주자

 

BackgroundWorker는 쓰레드 대신? 사용해서 작업을 맞기면 된다.

BackgroundWorker은 다음 이벤트를 가지고있다.

1. DoWork 백그라운드 작업

2. ProgressChanged 작업 경과 및 상태 변화 보고

3. RunWorkerCompleted 작업 완료시 호출

 

728x90