2010-02-18 172 views
0

我有一個單獨的線程來偵聽數據。在接收到一些數據時,它需要訪問應用程序中的一個窗口併爲該窗口設置一些字段。如何在wpf多線程應用程序中訪問窗口

現在,當我使用這個它拋出一個異常(說是Windows1被其它線程擁有該線程不能訪問):

 foreach (Window w in App.Current.Windows) 
     { 
      if (w.Name == "WindowIamInterested") 
      { 
       //w.SetField set some fields in the window and 
       //and do w.Show() or w.Activate() to show the window to user 
      } 
     } 

上面的代碼在一個單獨的線程中運行,而不是在主線程。 有沒有一種方法可以訪問和修改窗口。

回答

1

您可以使用Dispatcher.Invoke

Application.Current.Dispatcher.Invoke(
    (ThreadStart)delegate 
    { 
     // do your UI work here 
    }); 

Dispatcher.Invoke同步執行。如果你想異步執行,你可以使用Dispatcher.BeginInvoke

+0

工作。謝謝!!! – VNarasimhaM 2010-02-18 19:31:26

1

如果您使用的是WPF控件,則可以使用其調度程序在UI線程上安排更新:

myControl.Dispatcher.BeginInvoke(
    System.Windows.Threading.DispatcherPriority.Normal 
    , new System.Windows.Threading.DispatcherOperationCallback(delegate 
    {     
    // update control here 
    return null; 
    }), null); 

你會使用Invoke()如果你需要阻止,直到控制更新,否則你應該使用BeginInvoke()

+0

但是我如何訪問myControl。這裏myControl是一個窗口。那麼我怎樣才能訪問窗口。如果我嘗試訪問它,它會引發異常。 – VNarasimhaM 2010-02-18 18:50:11

相關問題