2012-04-01 64 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