C#/WPF

C# Thread Dispatcher (Cross Thread 방지)

백엔드담당자 2021. 7. 21. 16:22
반응형

1. 많은 UI 구성 요소에서 호출 스레드가 필요하므로 해당 스레드는 STA여야 합니다.
2. 다른 스레드가 이 개체를 소유하고 있어 호출한 스레드가 해당 개체에 액세스할 수 없습니다

 

전부 Cross Thread 문제로 메인쓰레드가 버튼A에 색상을 넣는 등의 작업을 하고 있을 때 서브쓰레드가 버튼A에 접근할 경우 충돌이 발생하는 문제

 

Dispatcher.CurrentDispatcher.InvokeAsync(delegate{

//To do

}, DispatcherPriority.Loaded);

 

Dispatcher.BeginInvoke(DispatcherPriority.Normal, delegate(){
// To do
});

 

나는 첫번째 방법을 사용했다.

메인쓰레드에서 파생된 쓰레드를 사용하는 방법이라고 한다.

InvokeAsync를 통해 비동기로 구현된다.

 

 

참고자료 이것저것 많이 봤음
[C#] WPF Thread  https://techlog.gurucat.net/167
[WPF]Dispatcher와 UI Threading http://byung.egloos.com/v/4459989
[WPF] wpf BeginInvoke에서 람다식 쓰는 방법 구문 https://chanun.tistory.com/entry/WPF-wpf-BeginInvoke에서-람다식-쓰는-방법-구문 [차넌's]
WPF 멀티쓰레드 프로그래밍(Multi Thread), WPF에서 Dispatcher, BackgroundWorker  http://ojc.asia/bbs/board.php?bo_table=WPF&wr_id=23

 

반응형