我在学习多线程(以及相关的东西,如并发性,TPL-- .NET,Windows),并希望对这个问题的答案能够显着减少我的疑惑。为什么输出(从多个线程)到WPF UI需要调度程序,而控制台却不需要?
为什么WPF UI需要通过Dispatcher输出(来自多个线程),而控制台却不需要?
我希望这个解释稍微详细一些,然后在MSDN docs中使用the overused and underdefined这个短语Console class is thread-safe(或者更好地避免使用含糊不清的术语)。
更新:
感谢贾斯汀Pihony的评论,子问题:
Why reading from WPF UI is not possible without a Dispatcher object而Windows窗体允许读取和写入,而不调用/ BeginInvoke的?
为什么(或如何)读取会危害WPF UI的线程安全性?
我试图消除歧义,我从Parallel Programming in .NET Framework 4: Getting Started短语:
“我没有与控制台应用程序问题,因为 Console类是线程安全的,但在WPF中,UI组件即可。安全 由专门的UI线程”
建议主题只访问读取答案:
- Why does Console.ReadKey() block output of Console.WriteLine called in another thread?
- Can you access UI elements from another thread? (get not set)
- Why do UI Controls in WPF have Thread Affinity?
- Calling Console.WriteLine from multiple threads
你尝试查找什么? http://stackoverflow.com/questions/10450750/can-you-access-ui-elements-from-another-thread-get-not-set Brian的答案应该足够你想要的 –
如果你相信“线程安全的“含糊不清,你有更多的阅读要做。 –
链接的SO问题指出为什么WPF UI具有该线程模型。控制台的选择是触及这一个:http://stackoverflow.com/questions/1079980/calling-console-writeline-from-multiple-threads –