在WinForms中,UI中可能有多个线程吗?

Buc*_*uck 3 c# multithreading winforms

我认为答案是肯定的.我在stackoverflow上检查了类似的问题,但它们似乎根据特定解决方案所需的内容(但可能已经错过了某些内容)进行了不同的指示.

是否有可能在WinForms应用程序中拥有多个UI线程?我正在重构并想知道是否应该使用ConcurrentDictionary或Dictionary来访问那些访问表单的线程.这是针对具有多个开发人员/设计的更大代码,我希望尽可能选择(但不要过度设计).由于我正在寻找一般性答案,因此细节不在这个问题中,尽管它们通常都是.感谢您的期待和任何帮助 - 非常感谢.

Pet*_*ter 5

是的,它可以做到,但这样做通常是错误的.多个UI线程 - Winforms

我遇到的每一个合理的GUI设计总是使用单个UI线程,即使框架允许更多.我能看到的唯一例外是独立窗口,它们存在于自己的线程中,并从位于不同线程中的模型访问共享数据,但这种设计的好处是有限的.(编辑:在某些情况下,使用多个UI线程的更好的替代方法是对不同的窗口使用不同的进程 - 比如浏览器中的选项卡 - 因为这允许主应用程序恢复,例如,如果窗口破坏了堆.)

但是,对于任何合理的高级应用程序,都会有多个非UI后台线程.

因为您在线程安全的上下文中询问,我建议记住MVVM和MVP模式.如果您的结构位于View,Presenter或ViewModel中,则不需要线程安全.模型通常存在于不同的线程中或与之对话 - 例如,如果它是数据库或数据库上的包装器.因此,线程安全通常是模型设计的一部分,或者是模型与ViewModel/Presenter的通信的一部分.

从头到尾MVVM:Tutorial?, 什么是MVP和MVC和的区别是什么?