Bhu*_*anK 10 .net c# events delegates winforms
我是c#.net的新手; 我只是想知道多次附加事件处理程序是否会导致意外结果?
实际上在我的应用程序中,我将事件处理程序附加到像这样的事件
cr.ListControlPart.Grid.CurrentCellActivated += new EventHandler(Grid_CurrentCellActivated);
Run Code Online (Sandbox Code Playgroud)
这段代码在代码中多次调用.
Ale*_*ria 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");
}
}
Run Code Online (Sandbox Code Playgroud)
Raj*_*ian 13
您可以在添加之前通过取消订阅来阻止它,
Object.Event -= EventHandler(method);
Object.Event += EventHandler(method);
Run Code Online (Sandbox Code Playgroud)
如果可以,通过总是在一个地方订阅事件来说明构造函数来阻止它
如果你继续附加事件处理程序,那么每次附加处理程序时它都会被引发一次.这意味着:
查看代码,而不是CurrentCellActivated多次挂钩事件,订阅一般CellActivated事件会更有意义.