WPF中的任何人都可以告訴我爲什麼我們需要使用Dispatcher.BeginInvoke()方法從DoworkEvent處理程序更新UI時,我們可以通過調用DoWork中的ReportProgress()方法使用ProgressChangedEvent事件處理程序更新UI事件事件處理程序? 如果我對後臺工作人員和調度員的理解不正確,請糾正我的問題?WPF中的BackgroundWorker和Dispatcher.BeginInvoke
0
A
回答
2
有一個規則,你需要記住:
更新UI需要從UI線程來完成。
謹記這一點,讓我們看看調度員做什麼BackgroundWorker的作用:
調度 調度員是一個對象,當你調用BeginInvoke,將執行線程調度的方法被創建。應用程序的調度程序始終在UI線程上創建,因此這將起作用。
後臺工作 的後臺工作很相似,但它提供了一個基於事件的API: 當你調用ReportProgress
的DoWork的法裏面,BackgroundWorker的將提高線程的背景工人是在一個事件創建。因此,如果您在UI線程上創建Background-Worker,則可以更新ProgressChanged事件處理程序內的UI。
2
您可以安全地從BackgroundWorker的ProgressChanged處理程序更新UI,而無需調用Dispatcher。
只要您撥打ReportProgress就會引發ProgressChanged事件。它在創建BackgroundWorker實例的線程上執行,該實例通常是UI線程。
從在ReportProgress備註部分:
到ReportProgress方法的調用是異步的,並立即返回 。 ProgressChanged事件處理程序在創建BackgroundWorker的線程 上執行。
相關問題
- 1. WPF Dispatcher.BeginInvoke和線程訪問
- 2. 瞭解WPF Dispatcher.BeginInvoke
- 3. BackgroundWorker和WPF
- 4. WPF和backgroundworker問題
- 5. WPF中的backgroundworker類
- 6. DispatcherFrame如何與WPF中的Dispatcher.BeginInvoke不同?
- 7. WPF Dispatcher.BeginInvoke代表問題
- 8. WPF Dispatcher.BeginInvoke拋出異常
- 9. WPF/BackgroundWorker和BitmapSource問題
- 10. ProgressBar與WPF中的BackgroundWorker
- 11. WPF BackgroundWorker執行
- 12. Dispatcher.BeginInvoke()
- 13. WPF CrossThreadException在App.xaml中與BackgroundWorker的
- 14. 如何檢索WPF/C中的Dispatcher.BeginInvoke的值#
- 15. 如何使用wpf中的Dispatcher.BeginInvoke觸發事件
- 16. Dispatcher.BeginInvoke(...)如何更新WPF中的UI控件?
- 17. 在WPF中,UI的dispatcher.begininvoke方法線程安全嗎?
- 18. Dispatcher.BeginInvoke C#,Silverlight的
- 19. wpf BackgroundWorker - 關於更新UI
- 20. 使用backgroundworker更新datagrid WPF
- 21. 如何在BackgroundWorker中創建WPF窗口?
- 22. 在WPF中使用不確定進度條和Backgroundworker
- 23. Dispatcher.BeginInvoke和Task.Factory.StartNew之間的區別
- 24. WPF C#BackgroundWorker使用的方法
- 25. 的BackgroundWorker停止WPF UI被刷新
- 26. BackgroundWorker的+ WPF - >冷凍窗口
- 27. 而不ProgressChanged BackgroundWorker的更新GUI在WPF
- 28. WPF使用和BackgroundWorker的線程訪問一個ObjectContext的
- 29. 幫助Dispatcher.BeginInvoke
- 30. BackgroundWorker的和插口
正如答案中所述,您不應該從DoWork事件處理程序更新UI,只需從進度和已完成的處理程序中更新UI。 – 2013-04-21 15:18:20