정리가 필요한 카테고리(추후 정리)/C#,Unity

[WPF] 다른 스레드에서 UI 스레드 쪽에 접근하기

TwinParadox 2018. 4. 24. 22:46
728x90

1. 많은 UI 구성 요소에서 호출 스레드가 필요하므로 해당 스레드는 STA여야 합니다.


2. "다른 스레드가 소유하고 있는 오브젝트에 현재 스레드가 접근할 수 없다"

(The calling thread cannot access this object because a different thread owns it.)



최근 윈폼 프로그램을 WPF로 바꾸는 과정에서 주기적으로 창을 호출하는 과정에서 위 오류가 발생했다.

윈폼에서는 이런 일이 없었지만 WPF에서는 UI 스레드와 그렇지 않은 스레드로 나누고 있어 이런 오류가 발생한다.

이럴 때는 Dispatcher.Invoke를 이용하여 해결해야 한다.



Dispatcher.Invoke(DispatcherPriority.Normal, new Action(delegate{}));


Dispatcher.Invoke(() =>

{

    #TODO

    UIThread() ... 등등

});



두 가지 방법 중 편한 것을 선택해서 활용하면 된다. 필자는 후자의 방법으로 막았다.

728x90