2011-12-03 81 views
2

僅在UI調度程序線程上允許WPF UI元素更新。因此,試圖從一個單獨的線程更新UI元素將以異常結束。 我在互聯網上找到解決這個問題的唯一辦法就是擁有這樣的:SwingUtilities.invokeLater等效於WPF

ThreadStart start = delegate(){ 
    Dispatcher.Invoke(DispatcherPriority.Normal, new Action... 
}; 
new Thread(start).Start(); 

Java有SwingUtilities.invokeLater方法做同樣的事。

我的問題是:是否有一個專門的WPF實用程序類與Java SWING SwingUtilities.invokeLater等效?

回答

9
Dispatcher.BeginInvoke(
    new Action(() => { 
     label.Text = "Foo" 
    }) 
); 

可能更接近的invokeLater語法

+0

請原諒我的求情中性問題,這是否在一個單獨的線程運行? – GETah

+0

不能與[WPF UI](http://msdn.microsoft.com/en-us/magazine/cc163328.aspx) –

+0

運行在同一個線程中,好的,謝謝,明天我會試一試,並會返回一些反饋:) – GETah

1

我很確定答案是:沒有(除了Dispatcher,我認爲它會幫助你很多)。

對您的代碼的評論:線程是沒有必要的。只需使用

Dispatcher.Invoke(...) 
-1

**我覺得你用這個方法:

Application.DoEvents() 

這個方法有用的,當你想反映您的線程更改爲窗口窗體元素,而不會在處理線程時空閒窗體**

+0

這不會做同樣的事情。這被調用來消除消息循環。 OP正在尋求一種方法來從GUI線程上的另一個線程運行某些東西 –