|
监视消息循环
在上一篇文章中,我们讨论了消息循环是响应用户输入的根本,还提到了在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二三事(二),转载需保留来源!
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。