C# 为什么(从多个线程)到WPF UI的输出需要Dispatcher,而控制台不需要?
我正在学习多线程(以及并发、TPL-in.NET、Windows等相关内容),希望这个问题的答案能大大减少我的疑虑 为什么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的线程安全性 我试图为自己消除以下短语的
我希望这个解释会比MSDN文档中的短语更详细一些(或者更好地避免使用模棱两可的术语) 更新:
感谢Justin Pihony的评论,子问题:
而Windows窗体允许在不调用/BeginInvoke的情况下读写?
为什么(或如何)阅读会损害WPF UI的线程安全性 我试图为自己消除以下短语的歧义: “控制台应用程序没有问题,因为 控制台类是线程安全的。但在WPF中,UI组件可以安全地 仅由专用UI线程访问” 建议阅读答案的主题:
- WPF/WinForm创建和使用窗口,该窗口与单线程相关
控制台不使用窗口,它只是输出/回复字符串
这是“按窗口开发的设计”。您已经尝试查找了什么?Brian的回答应该足以满足您的需求如果您认为“线程安全”是模糊的和未定义的,那么您还有更多的阅读要做。链接的SO问题指出了WPF UI为什么有这种线程模型。控制台的选择是这样的:@HighCore,我看不出你的推荐人怎么会重复我的问题。为什么控制台不需要Dispatcher对象?即使在控制台中,跨
对象不正确地使用线程
也是不安全的,控制台不需要Dispatcher
的原因是它读/写到输入/输出
流(Stdin,Stdout)。