多次附加事件处理程序

时间:2013-10-11 09:41:50

标签: c# .net winforms events delegates

我是c#.net的新手;我只想知道多次附加事件处理程序是否会导致意外结果?

实际上在我的应用程序中,我将事件处理程序附加到像

这样的事件
cr.ListControlPart.Grid.CurrentCellActivated += new EventHandler(Grid_CurrentCellActivated); 

这段代码在代码中多次调用。

3 个答案:

答案 0 :(得分:20)

亲自尝试:

static class Program
{
    static event EventHandler MyEvent;

    static void Main()
    {
        // registering event
        MyEvent += Program_MyEvent;
        MyEvent += Program_MyEvent;
        MyEvent += Program_MyEvent;
        MyEvent += Program_MyEvent;
        MyEvent += Program_MyEvent;

        // invoke event
        MyEvent(null, EventArgs.Empty);
        Console.ReadKey();
    }

    static void Program_MyEvent(object sender, EventArgs e)
    {
        Console.WriteLine("MyEvent fired");
    }
}

答案 1 :(得分:11)

您可以在添加之前通过取消订阅来阻止它,

Object.Event -= EventHandler(method);
Object.Event += EventHandler(method);

如果可以,通过总是在一个地方订阅事件来说明构造函数

来防止它

答案 2 :(得分:8)

如果你继续附加事件处理程序,那么每次附加处理程序时它都会被引发一次。这意味着:

  • 如果您只需要将其提升一次,则分配一个处理程序。
  • 如果您连接相同的处理程序4次,则会被调用4次。

查看您的代码,而不是多次挂钩CurrentCellActivated事件,订阅一般CellActivated事件会更有意义。