C# 为什么(从多个线程)到WPF UI的输出需要Dispatcher,而控制台不需要?

C# 为什么(从多个线程)到WPF UI的输出需要Dispatcher,而控制台不需要?,c#,multithreading,concurrency,thread-safety,task-parallel-library,C#,Multithreading,Concurrency,Thread Safety,Task Parallel Library,我正在学习多线程(以及并发、TPL-in.NET、Windows等相关内容),希望这个问题的答案能大大减少我的疑虑 为什么WPF UI需要通过Dispatcher进行输出(来自多个线程),而控制台则不需要? 我希望这个解释会比MSDN文档中的短语更详细一些(或者更好地避免使用模棱两可的术语) 更新: 感谢Justin Pihony的评论,子问题: 而Windows窗体允许在不调用/BeginInvoke的情况下读写? 为什么(或如何)阅读会损害WPF UI的线程安全性 我试图为自己消除以下短语的

我正在学习多线程(以及并发、TPL-in.NET、Windows等相关内容),希望这个问题的答案能大大减少我的疑虑

为什么WPF UI需要通过Dispatcher进行输出(来自多个线程),而控制台则不需要?
我希望这个解释会比MSDN文档中的短语更详细一些(或者更好地避免使用模棱两可的术语)

更新:
感谢Justin Pihony的评论,子问题:
而Windows窗体允许在不调用/BeginInvoke的情况下读写?
为什么(或如何)阅读会损害WPF UI的线程安全性

我试图为自己消除以下短语的歧义:

“控制台应用程序没有问题,因为 控制台类是线程安全的。但在WPF中,UI组件可以安全地 仅由专用UI线程访问”

建议阅读答案的主题:

    • WPF/WinForm创建和使用窗口,该窗口与单线程相关

      控制台不使用窗口,它只是输出/回复字符串


      这是“按窗口开发的设计”。

      您已经尝试查找了什么?Brian的回答应该足以满足您的需求如果您认为“线程安全”是模糊的和未定义的,那么您还有更多的阅读要做。链接的SO问题指出了WPF UI为什么有这种线程模型。控制台的选择是这样的:@HighCore,我看不出你的推荐人怎么会重复我的问题。为什么控制台不需要Dispatcher对象?即使在控制台中,跨
      对象
      不正确地使用
      线程
      也是不安全的,控制台不需要
      Dispatcher
      的原因是它
      读/写
      输入/输出
      流(Stdin,Stdout)。