2014-02-25 63 views
1

是什麼正確的語法使用Dispatcher切換到UI線程

Dispatcher.CurrentDispatcher.Invoke(somemethod); 

Application.Current.Dispatcher.Invoke(somemethod); 

當我使用的第一個的someMethod的執行比第二單向更快的區別.I使用秒錶和測量的經過milliseconds.I使用此方法來更新基於某些數據從外螺紋來一些UI控件。

回答

5

Dispatcher.CurrentDispatcher會讓你調用與當前線程相關聯的調用此方法的調度程序。

Application.Current.Dispatcher將得到您的調度員UI線程相關(假設你的應用被UI線程啓動)。


從本質上說,如果你是從後臺線程調用委託,並嘗試更新UI組件從它說

textBlock.Text = "Test"; 

第一種方法會失敗,因爲它會調用在後臺線程調度和UI委託組件只能從UI線程修改。

第二條本辦法將工作,因爲它會在委託UI線程任務。


當我使用的第一個的someMethod的執行比第二one.I使用秒錶方式更快 和測量的經過 milliseconds.I使用此方法來更新基於 一些一些UI控件數據來自外部線程。

如果第一種方法爲你工作再有就是根本不需要,因爲這意味着你已經在UI線程使用調度。

您需要發佈樣本數據以便觀察時間,以便驗證。

+1

嘿Rohit,感謝您的清晰解釋。您是對的,第一種方法應該失敗,我檢查了我的情況,因爲我正在更新綁定到線程安全可觀察集合的UI組件。我發現其他綁定的UI組件不會刷新最新的數據。因此,一些較少的UI刷新工作使第一種情況下的執行時間減少。無論如何,我現在處於正確的軌道上,感謝您的幫助。 – TRS