본문 바로가기

Dev::DotNet/WPF

Window 를 특정 Thread 에서 위임하는 법

UI 의 변경은 보통 주 Thread에서 가능하고 

다른 Thread에서 UI 의 변경은 invoke를 통해서 하게 된다.


WPF 의 경우도 다르지 않다.

하지만 특정 Window를 주 Thread가 아닌 별도 생성한 Thread에 아예 위임해버릴 수도 있다.

(보통 이렇게 사용할 경우는 없겠지만...)


Thread thread = new Thread(() =>
{
    Window myWnd = new MyWindow();
    myWnd .Closed += (sender, e) => myWnd.Dispatcher.InvokeShutdown();

    System.Windows.Threading.Dispatcher.Run();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();


이렇게 하면 저 안에서 생성된 Window는 닫힐 때까지, 

주 Thread가 아닌 지금 새로 생성한 Thread에 속하여 실행되게 된다.