C#-GUI消息队列(消息泵-并行或串行)

我似乎在任何地方都找不到答案.我不确定我是否会说出来.

发送给表单处理控件的消息是否彼此并行?

我总是给人一种印象,我们每个线程单元都有一个消息泵,而一个泵将提供与该线程相连的整个GUI.因此,如果您将钩子插入一个控件的wndproc并冻结线程(Thread.Sleep()),整个表单将冻结吗?

如果是这样,则this question似乎证明当特定消息到达子控件时,通过休眠,相邻控件处理了它的下一条消息.怎么样?

解决方法:

邮件严格按顺序处理.不要被Q A中的时间戳误导,它只是分数中没有足够的数字来表明消息实际上以微秒的间隔到达.消息处理程序非常快,这是正常的.

只有当您有多个线程时,代码才能并行运行.这对用户界面是有害的,大块代码从来都不是线程安全的.即使很小的块,也非常基本的.NET类(例如List<>不是.通过使用锁定,困难的方式以及只有小代码才能做到的事情,或者通过确保代码始终在一个特定线程上运行,您可以保持代码线程安全.

由于UI不是线程安全的,因此存在消息循环.它是producer-consumer problem的通用解决方案.操作系统和其他进程中的线程产生,UI线程消耗.

上一篇:(一)在linux上ubuntu搭建hustOJ系统


下一篇:C#如何将字符追加到列表框DisplayMember?