2010-08-05 9 views
0
var t = new Thread(new ParameterizedThreadStart(DoWork)); 
    t.SetApartmentState(ApartmentState.STA); 
    t.IsBackground = true; 
    t.Start(App.Current.MainWindow); 

    public static void DoWork(object owner) 
    { 
     var progressDlg = new ProgressBarDialog(); 

     // progressDlg.Owner = (Window)owner; // This doesn't work 

     progressDlg.ShowDialog(); 
    } 

자, 제발 작동하게 만들 수 있습니까?다른 스레드에서 Window에 액세스하는 방법?

예제의 App.Current.MainWindow는 다른 스레드에서 액세스 할 수 없습니다.

Parallel.Invoke()의 새로운 멋진 방법에 대해서도 들었지만이 상황에 적용 할 수 있는지 여부는 알 수 없습니다. 어떻게 작동하는지 보여 주시면 고맙습니다.

+0

난 단지 ProgressBarDialog을 가정 할 수있다 준 같은 대답을하다이

Action x = (Action)delegate { //do my UI updating }; Dispatcher.Invoke(x, new object[] { }); 

같은

뭔가 내가 WPF 창을 추측, 어떤 종류의 창입니다. 한 스레드에서 UI 요소를 만들고 소유자를 다른 스레드에 속한 것으로 설정할 수 없습니다. –

답변

0

백그라운드 스레드에서 UI에 액세스 할 수 없으며 모든 업데이트가 기본 스레드에 있어야합니다. 위와 같은 경우에 수행하려는 것처럼 종속성 속성 설정이 포함됩니다. Dispatcher를 사용하여이 문제를 해결할 수 있습니다. 내가 here...

+0

별도의 스레드에서 (창) 소유자에게 액세스 할 수 없기 때문에 '작동하지 않습니다. 그러나 이론적으로 그것은 불가능한 것이 아닙니다. 다른 스레드에서 창을 만들고 주 스레드에서 해당 창의 소유자를 얻는 방법이 있어야합니다. – Agzam

관련 문제