C#windows应用程序中的两个UI线程

Hos*_*nia 4 c# winforms

如何在C#windows应用程序中实现两个ui线程?

Han*_*ant 7

您需要调用Thread.SetApartmentState()以在启动之前将线程切换到STA.并且使用消息循环来保持在该线程上创建的任何窗口,Application.Run().Application.ExitThread()将终止消息循环并导致线程退出.使用Run(Form)使其自动化,就像在主线程上一样.

但请注意,用户可能很难处理您在该线程上创建的窗口.它们与主线程中的窗口没有Z顺序关系,桌面是它们的父级.这往往会让他们很容易迷失在另一个窗口后面,包括你自己的窗户.这方面的尴尬解决方法是TopMost和pinvoking SetParent().


Ern*_*rno 5

这可能不是一个答案,而是更多的解释.

如果允许两个线程同时访问同一个像素 - 这是多线程UI的结果 - 你需要在线程之间进行某种同步.如果线程没有同步,应该如何确定像素的颜色?

所以我们必须添加锁定.锁定每个像素是非常昂贵的,所以我们很快就会转向锁定每个控件或每个窗口.你去:通过允许1和只有1个线程访问我们实现锁定的UI.

BTW:用control或controltree替换像素; 它不仅仅是关于共享数据的像素,无论是像素还是控件.