下面有这么一个例子:
public partial class Default7 : System.Web.UI.Page
{
    
    protected override void OnInit(EventArgs e)
    {
        this.Button1.Click += delegate { Response.Write(1 + "<br>"); };
        base.OnInit(e);
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Write(2 + "<br>");
    }
}
得到的结果是
2
1
为什么不是先执行匿名函数,而是先执行Resopnse.Write(2+"<br>");为什么结果不是
1
2
呢?

解决方案 »

  1.   

    protected override void OnInit(EventArgs e)
        {
            this.Button1.Click += delegate { Response.Write(1 + "<br>"); };
            base.OnInit(e);
        }
    是在页面生成的时候发生。
    ------------
    protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Write(2 + "<br>");
        }他的定义是在类构造的时候就生成了,我的想法是winform不知道webform是不是这样,不过应该差不多
      

  2.   

    点出按钮时执行Click事件,2
    同时由于是服务器事件,
    页面刷新OnInit()1
    OnLoad()
      

  3.   

    Click事件同时触发两个动作,应该是C#的内部机制来决定谁先执行的
      

  4.   

    Button1 Click之后的执行顺序为
    OnInit->Button1_Click->delegate{Response.Write(1 + "<br>"); }
    每次Click都会为Button1重新添加委托,也就是说第一次加载时的那个委托并不保存,而只是将该事件添加到Button1的响应队列里,优先级应该在Button1_Click之后
      

  5.   

    protected override void OnInit(EventArgs e)
       //初始化页面时执行
     protected void Button1_Click(object sender, EventArgs e)
        //双击后才执行
    C#的运行机制可能是先执行点击事件然后再执行页面加载事件。。