Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 运行消息泵和执行代码的UI线程?_C#_Winforms_Multithreading - Fatal编程技术网

C# 运行消息泵和执行代码的UI线程?

C# 运行消息泵和执行代码的UI线程?,c#,winforms,multithreading,C#,Winforms,Multithreading,Winforms中的UI线程负责通过调用Application.Run来运行消息泵。我所说的消息泵是指一个无止境的循环,它不断地将消息从队列中拉出 所以现在我的问题是,当点击处理程序被触发时,UI线程如何也执行代码块?它应该忙于消息泵,无法执行代码?处理消息泵需要时间,因为这是从消息泵(通过单击事件)同步调用的 这就是为什么昂贵的代码会导致UI挂起。因此,当单击按钮时,事件处理程序中的代码会作为消息发送到队列?单击的windows消息由MP处理,WinForms代码的内部调用单击事件,并且此事件

Winforms中的UI线程负责通过调用
Application.Run
来运行消息泵。我所说的消息泵是指一个无止境的循环,它不断地将消息从队列中拉出


所以现在我的问题是,当点击处理程序被触发时,UI线程如何也执行代码块?它应该忙于消息泵,无法执行代码?

处理消息泵需要时间,因为这是从消息泵(通过单击事件)同步调用的


这就是为什么昂贵的代码会导致UI挂起。

因此,当单击按钮时,事件处理程序中的代码会作为消息发送到队列?单击的windows消息由MP处理,WinForms代码的内部调用单击事件,并且此事件的任何订阅者都将同步运行-单击处理程序就是这样的订阅者之一。啊,有道理!-但是可以肯定的是,MP处理的消息必须包含一些关于应该调用什么点击事件的信息,因为可能还有另一个按钮的点击事件?基本的windows消息往往只是坐标,然后被转换到通过“点击测试”操作的控件中。这开始涉及到我不太了解的Win32底层内容。对于WinForms,您需要知道的是,生命在一个线程上是同步的。@Brumcouse是的。。。但我指的是UI线程通常只是其中之一。我想,没有什么能阻止你拥有多个不同的UI消息泵。