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

C# GUI消息队列(消息泵-并行或串行),c#,winforms,windows-messages,message-pump,C#,Winforms,Windows Messages,Message Pump,我似乎在任何地方都找不到答案。我不知道我是否知道如何表达它 发送给表单上控件的消息是否相互并行 我一直以为每个线程单元有一个消息泵,一个消息泵将为连接到该线程的整个GUI提供信息。因此,如果您在一个控件上挂接wndproc并冻结线程(thread.Sleep()),整个表单会冻结吗 如果是这样,似乎证明了当某个特定消息到达子控件时,相邻控件通过休眠来处理其下一条消息。如何?消息严格按顺序处理。不要被Q+A中的时间戳误导,它只是在分数中没有足够的数字来显示消息实际上是以微秒的间隔到达的。消息处理程

我似乎在任何地方都找不到答案。我不知道我是否知道如何表达它

发送给表单上控件的消息是否相互并行

我一直以为每个线程单元有一个消息泵,一个消息泵将为连接到该线程的整个GUI提供信息。因此,如果您在一个控件上挂接wndproc并冻结线程(thread.Sleep()),整个表单会冻结吗


如果是这样,似乎证明了当某个特定消息到达子控件时,相邻控件通过休眠来处理其下一条消息。如何?

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

只有当您有多个线程时,代码才会并行运行。这是对用户界面的毒药,大块代码永远不会是线程安全的。即使是很小的块,非常基本的.NET类,比如List,也不是。您可以通过使用锁定、硬方法和一些您只能尝试使用小代码的方法来保持代码线程的安全,或者通过确保它始终在一个特定线程上运行来确保代码线程的安全


消息循环存在,因为UI不是线程安全的。这是解决问题的普遍办法。操作系统和其他进程中的线程产生,UI线程消耗。

我对底层操作系统的详细信息没有深入了解,但这可能取决于您是否在C#NET GUI中使用WinForms或WPF。您能具体说明吗?抱歉,问题已更新。谢谢您的回复。这是非常有益的。我可以告诉您,这些时间戳是在每次从同一表单上的各种控件wndproc覆盖向阻塞集合添加条目时创建的。我对时间戳不是很感兴趣,而是对它们进入阻塞集合的顺序感兴趣。似乎(似乎只是错觉)睡眠特定消息允许绑定到不同控件的消息首先处理。这纯粹是幻觉吗?因为还有其他证据支持这一点(一个bug已经消失了),所以我不会对我看不到的代码进行评论。但肯定有某种错觉。