我正在嘗試編寫一個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. 在wpf中更新運行時樣式
- 5. 在「實時」更新WPF控件
- 6. 在運行時移動WPF控件
- 7. 運行時Silverlight控件佈局更新
- 8. WPF在運行時更改控件模板中的文本
- 9. WPF - 運行時更新綁定問題
- 10. 創建WPF運行時控件
- 11. 在運行時用其他控件替換子控件WPF
- 12. 刷新控件在運行時
- 13. 運行時更新子件
- 14. 在wpf項目運行時更改或更新app.config
- 15. 控件位置在運行時移動它後不更新
- 16. 在運行時更新app.config文件
- 17. 在運行時更新組件位置
- 18. Android R文件在運行時更新
- 19. 在運行時更新XmlDataSource
- 20. 在運行時更新label.text
- 21. 在運行時更新Jtable?
- 22. 在運行時更新JList
- 23. 在運行時更新Textview?
- 24. 在運行時更新JTable
- 25. 在運行時更新JAR
- 26. WPF - 在運行時
- 27. WPF:如何在運行時更改CurrentUICulture
- 28. WPF Listbox在運行時更改容器
- 29. 在運行時更改WPF源代碼
- 30. 如何在WPF運行時在控件周圍設置邊框?