我正在嘗試編寫一個WPF應用程序,它將在運行時使用線程更新一組文本框和標籤,但問題在於,當有線程嘗試更新文本框和標籤時我得到以下錯誤:「調用線程不能訪問此對象,因爲不同的線程擁有它。」運行時是否可以更新控件?在運行時更新WPF控件
3
A
回答
4
是的,但您必須使用Dispatcher.Invoke更新UI線程中的UI元素。
在C#示例:與其
myTextBox.Text = myText;
使用
Dispatcher.Invoke(new Action(() => myTextBox.Text = myText));
VB.NET(之前版本4)不支持匿名方法,所以你必須有一個匿名要解決它功能:
Dispatcher.Invoke(Function() UpdateMyTextBox(myText))
...
Function UpdateMyTextBox(ByVal text As String) As Object
myTextBox.Text = text
Return Nothing
End Function
或者,您可以使用BackgroundWorker類開始後臺線程,該類通過ProgressChanged
和RunWorkerCompleted
事件支持UI中的更新:兩個事件均在UI線程中自動引發。使用BackgroundWorker的例子可以在這裏找到:SO question 1754827。
2
WPF中的控件有一個Dispatcher
屬性,您可以在其中調用Invoke
,將代理與想要在GUI線程上下文中執行的代碼一起傳遞。
myCheckBox.Dispatcher.Invoke(DispatcherPriority.Normal,
() => myCheckBox.IsChecked = true);
1
對於WPF線程模型的詳盡的解釋,包括調度的工作原理,從徒步旅行山阿瓦隆車間跳到分鐘17 this video在MIX09。
相關問題
- 1. WPF在運行時更新樣式
- 2. 在運行時更新內容WPF
- 3. 在「實時」更新WPF控件
- 4. 運行時Silverlight控件佈局更新
- 5. WPF在運行時更改控件模板中的文本
- 6. WPF - 運行時更新綁定問題
- 7. 創建WPF運行時控件
- 8. 在運行時用其他控件替換子控件WPF
- 9. 在運行時更新Textview?
- 10. 在運行時更新XmlDataSource
- 11. 在運行時更新label.text
- 12. 在運行時更新JTable
- 13. WPF - 在運行時
- 14. 在運行時更改WPF源代碼
- 15. WPF:如何在運行時更改CurrentUICulture
- 16. 如何在WPF運行時在控件周圍設置邊框?
- 17. wpf圖像資源和運行時在wpf控制中更改圖像
- 18. 在運行時檢索WPF控件狀態(複選框等)
- 19. 在WPF中運行時創建的測量控件
- 20. 如何在運行時確定C#中WPF控件的邊界?
- 21. 創建一個在運行時加載XAML的WPF控件
- 22. 每當控件更改WPF中的值時更新父級
- 23. WPF - 基於listviewitem選擇更改控件。控件不更新
- 24. MEF運行時插件更新問題
- 25. WPF用戶控件不更新路徑
- 26. WPF - 更新價值自定義控件
- 27. 更新WPF中ListBox控件的問題
- 28. WPF自定義控件不更新
- 29. wpf控件上的更新源代碼
- 30. 有子控件運行WPF開始