C# 运行消息泵和执行代码的UI线程?
Winforms中的UI线程负责通过调用C# 运行消息泵和执行代码的UI线程?,c#,winforms,multithreading,C#,Winforms,Multithreading,Winforms中的UI线程负责通过调用Application.Run来运行消息泵。我所说的消息泵是指一个无止境的循环,它不断地将消息从队列中拉出 所以现在我的问题是,当点击处理程序被触发时,UI线程如何也执行代码块?它应该忙于消息泵,无法执行代码?处理消息泵需要时间,因为这是从消息泵(通过单击事件)同步调用的 这就是为什么昂贵的代码会导致UI挂起。因此,当单击按钮时,事件处理程序中的代码会作为消息发送到队列?单击的windows消息由MP处理,WinForms代码的内部调用单击事件,并且此事件
Application.Run
来运行消息泵。我所说的消息泵是指一个无止境的循环,它不断地将消息从队列中拉出
所以现在我的问题是,当点击处理程序被触发时,UI线程如何也执行代码块?它应该忙于消息泵,无法执行代码?处理消息泵需要时间,因为这是从消息泵(通过单击事件)同步调用的
这就是为什么昂贵的代码会导致UI挂起。因此,当单击按钮时,事件处理程序中的代码会作为消息发送到队列?单击的windows消息由MP处理,WinForms代码的内部调用单击事件,并且此事件的任何订阅者都将同步运行-单击处理程序就是这样的订阅者之一。啊,有道理!-但是可以肯定的是,MP处理的消息必须包含一些关于应该调用什么点击事件的信息,因为可能还有另一个按钮的点击事件?基本的windows消息往往只是坐标,然后被转换到通过“点击测试”操作的控件中。这开始涉及到我不太了解的Win32底层内容。对于WinForms,您需要知道的是,生命在一个线程上是同步的。@Brumcouse是的。。。但我指的是UI线程通常只是其中之一。我想,没有什么能阻止你拥有多个不同的UI消息泵。