3
A
回答
1
我寧願調度Task
到UI線程。您可以通過在UI線程上調用TaskScheduler.FromCurrentSynchronizationContext
來獲得UI線程調度程序。 MSDN有一個例子here。
我通常更喜歡基於SynchronizationContext
的解決方案,而不是基於Dispatcher
的解決方案,因爲它們與WPF/Silverlight沒有關係。因此,可以編寫處理同步的通用業務對象層,但可以使用WPF,ASP.NET,Windows Forms,Win32 Services等。
相關問題
- 1. 從後臺線程更新UI控件
- 2. 從後臺更新UI線程
- 3. 從後臺線程更新GEF模型
- 4. 從多個後臺線程更新UI
- 5. 從後臺線程更新UI
- 6. 從後臺線程更新表視圖?
- 7. 從後臺線程問題更新UI
- 8. UIProgressView更新後臺線程
- 9. 當BindingList <>更改時UI不會更新
- 10. WPF ObservableCollection <T> vs BindingList <T>
- 11. 使用IProgress從後臺線程報告<T>
- 12. 如何調用跨線程BindingList <T> in C#
- 13. BindingList <> ListChanged事件
- 14. C#繼承的類BindingList <T>不更新控件
- 15. 後臺線程更新通知NSView
- 16. canvas未實時更新後臺線程
- 17. wpf後臺線程更新UI控制
- 18. 從後臺線程
- 19. 更新BindingLIst綁定到組合框,從線程以外的其他線程
- 20. 從後臺線程刷新C#DataGrid
- 21. Qt:後臺線程刷新UI線程
- 22. 使用一個ObservableCollection <T>與後臺線程
- 23. 主線程正在等待更新接口的後臺線程
- 24. iOS:如何在主線程中更新UI的後臺線程?
- 25. 更新片段後臺線程中的TextView(UI線程)
- 26. 從後臺工作線程和基類更新GUI控制
- 27. 從後臺線程更新主視圖 - Swift
- 28. 從後臺線程更新綁定屬性
- 29. 從後臺更新datagridview線程奇怪的行爲
- 30. 從後臺線程更新緩衝圖像
感謝您的回答。我設法通過應用Dispatcher,SynchronizationContext和Tasks來研究多線程的不同方式。確實非常有趣。 自從.NET 2.0以來,SynchronizationContext就存在了,我對此感到有些驚訝,但我不知道它。我總是使用這個經典控件。自從我完成了微軟的MCPD證書,他們根本就沒有在他們的材料中教授這一點。用於線程同步的TaskScheduler僅在.NET 4.0中可用,是否正確?這也可以通過手動方式來完成,對嗎? – Houman 2010-08-31 12:08:13
不幸的是,.NET 1時代的MSDN文檔推薦'Control.Invoke'仍然繼承到.NET 4.0中,所以大多數人都沒有意識到優越的'SynchronizationContext'。作爲[Rx庫](http://msdn.microsoft.com/zh-cn/devlabs/ee794896.aspx)的一部分,TaskScheduler已被移植到.NET 3.5。不,'ManualResetEvent'用於* synchronization *,而'SynchronizationContext'(儘管名稱)實際上用於*調度*工作到其他上下文。您不能使用'ManualResetEvent'在UI線程上運行委託。 – 2010-08-31 13:49:47
順便說一句,我已經在[我的博客](http://nitoprograms.com/)上的[Threading標籤](http://nitoprograms.blogspot.com/search/label)下寫了很多關於'SynchronizationContext'的內容/線程)。 – 2010-08-31 13:53:46