因為你在乙個非ui執行緒裡開啟了乙個ui執行緒,所有需要用dispatcher.invokeasync,切換到ui執行緒
詳細的解釋:
我們需要通過訪問window.dispatcher屬性,然後呼叫invoke方法 。僅此而已
好吧,那麼到底什麼是dispatcher呢?從字面上來說,它是所謂的接線員,或者排程員的意思。這說明什麼呢?每個執行緒都有乙個唯一的排程員,我們在**中所做的工作其實是向這個排程員發出指令,然後它再幫我們做。這樣理解就對了。
我們的窗體是在主線程建立出來的,裡面的控制項自然也是如此。wpf的應用程式也是單執行緒模型的(stathread),所以整個應用程式裡面會有乙個預設的dispatcher,它負責排程主線程的工作。這是非同步更新ui
task.
run(
async()
=>);
});}
執行緒非同步更新UI
winform程式一般是不允許非主線程操作ui,單可以通過執行緒與委託的方式並結合control類提供的begininvoke機制進行ui更改 如下,這是更新ui的方法 private void upuimethod 1 建立委託 private delegate void delegateupui...
WPF的UI更新方式
那在 wpf 中,要如何更新 ui 的內容呢?當然,要從乙個不正確的範例開始。ex1bad.xaml xmlns xmlns x title ex1bad height 300 width 300 ex1bad.xaml.cs usingsystem.threading usingsystem.wi...
WPF跨執行緒更新UI控制項
1.預設情況下,在windows應用程式中,net framework不允許在乙個執行緒中直接操作另乙個執行緒中的控制項。winform中實現跨執行緒操作控制項的兩種方法 1 關閉執行緒安全檢查 control.checkforillegalcrossthreadcalls false 2 使用控制...