2012-04-01 66 views
2

Winforms中的UI线程负责运行消息泵,请致电Application.Run。通过消息泵,我的意思是一个无限循环,不断从队列中拉出消息。UI线程都运行消息泵并执行代码?

所以,现在是我的问题,当前线程还可以执行一段代码时,UI线程如何执行。点击处理程序被触发?它应该忙于使用消息泵,并且无法执行代码?

回答

2

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

这就是昂贵的代码会导致UI挂起的原因。

+1

所以当单击按钮时,事件处理程序中的代码将作为消息发送到队列? – ebb 2012-04-01 09:31:20

+1

点击的窗口消息由MP处理,内部向WinForms代码调用click事件,并且此事件的任何订阅者将同步运行 - 点击处理程序就是这样一个订阅者。 – 2012-04-01 09:33:36

+0

啊有道理! - 但是当然,由MP处理的消息必须包含关于应该调用什么点击事件的某种信息,因为可能还有另一个按钮的点击事件? – ebb 2012-04-01 09:40:17