【问题标题】:Delegate and Event which execute/raised first?代表和事件哪个先执行/引发?
【发布时间】:2012-04-26 08:53:35
【问题描述】:

我不知道我是否应该在这里问这个问题但无论如何我都在问..

假设我有一个 asp 按钮控件,并且我正在为该按钮使用 Delegate 和 Click 事件,该按钮将首先触发?

在初始化时:

  btn1.Click += delegate{ Save(); };

点击事件:

   protected void btn1_Click(object sender, EventArgs e)
   {
     Save1();
   }

我想知道哪个会先执行/引发?

【问题讨论】:

    标签: c# asp.net .net events delegates


    【解决方案1】:

    btn1_click 在设计时自动附加到 InitializeComponent() 函数中的单击事件。 InitializeComponent(0函数从form的构造函数中调用。是winforms的默认sn-p。

    在调用InitializeComponent()之前不能调用以下语句,否则会报错“Object reference not set to an instance of an object”。直到此时,控件还没有初始化。

    btn1.Click += delegate{ Save(); };
    

    所以执行顺序是先btn1_Click事件,然后是delegate附加的save函数。

    【讨论】:

    • 好吧,我已经通过保留断点进行了检查,单击事件将首先引发然后删除保存功能。感谢您的回复。
    【解决方案2】:

    我认为这与分配它们的顺序有关。通常,一个名为 btn1_Click 的方法在您将其绑定到代码隐藏或您正在使用的 ASPX 文件中之前不会触发。

    我猜你正在将 btn1 绑定到 ASPX 中的 btn1_Click 方法,这可能会首先触发,但为什么不直接测试它呢?在两行都设置断点,看看哪个先命中?

    【讨论】:

      【解决方案3】:

      事件未被“执行”,事件被引发,因此将由您的事件处理程序执行,即在客户端专门进行的点击时btn1_Click

      【讨论】:

        猜你喜欢
        • 2015-05-14
        • 1970-01-01
        • 1970-01-01
        • 2018-07-01
        • 2017-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        相关资源
        最近更新 更多