private void button1_Click(object sender, System.EventArgs e)
{
if(str.Length == 0)
{
doevent();
}
        ......
}
public void doevent()
{
try
{
this.label1.Text = "完成";
Application.DoEvents();
                ......
}
catch(Exception ex)
{
str = "X";
throw ex;
}
}大概的代码是这样的。省略号的是很多计算的代码。这只是一个模式,源代码很长拿不出来。
就是想问问,为什么在Application.DoEvents();之后会从doevent()方法中跳出来又回到button1_click中的doevent();这一步呢?

解决方案 »

  1.   

    在doevent()方法中的this.label1.Text = "完成";
    这一次以前还有很多的代码。
      

  2.   

    我来给自己答案吧
    根据我的测试结果:private void timer1_Tick(object sender, System.EventArgs e)
    {
    this.label1.Text = DateTime.Now.ToLongTimeString() + "  " + DateTime.Now.Millisecond.ToString();
    for(int i =0;i<10000;i++)
    {
    this.label2.Text = i.ToString();
    System.Windows.Forms.Application.DoEvents();
    }
    this.label3.Text = DateTime.Now.ToLongTimeString() + "  " + DateTime.Now.Millisecond.ToString();
    }timer1的事件频率是5000毫秒(5秒钟),而for需要的时间大约是7500毫秒(7.5秒钟),当for循环进行到5秒钟的时候,也就是timer的事件频率到期时,在进行DoEvents()事件,这时就会从当前事件从跳出,开始另一次的timer1事件。