|
監視消息循環
在上一篇文章中,我們討論了消息循環是響應用戶輸入的根本,還提到了在WinForm中執行耗時操作是因為這個耗時操作與消息循環在同一個UI Thread上,導致不能處理用戶的后續響應,造成程序假死。除此之外,還說到了Form中的WndProc方法,說這個方法就是Win32時代那個處理消息的方法的.NET版。
那么今天這篇文章我們就來編個小程序來模擬一下這個耗時操作,看看是不是如上一篇所說:耗時操作造成消息循環的臨時中斷不能響應用戶后續輸入。
程序很簡單,就是一個簡單的窗體,上面放置一個按鈕,按鈕里有一個Thread.Sleep(50*1000)模擬耗時操作:
public partial class LongTimeForm : Form
{
public LongTimeForm()
{
InitializeComponent();
Debug.Listeners.Add(new ConsoleTraceListener());
}
private void btnLongTime_Click(object sender, EventArgs e)
{
Thread.Sleep(50 * 1000);
}
//既然這個WndProc是Win32中處理消息的方法的.NET版,那么我們應該在這里可以監視到所有用戶操作的“消息”
protected override void WndProc(ref Message m)
{
Debug.WriteLine(m.Msg.ToString());
base.WndProc(ref m);
}
}
NET技術:WinForm二三事(二),轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。