C# - 确保事件不要堆叠

Dar*_*ung 2 c# events

HI,

我有一个按钮单击事件,其中初始化用户定义的类型,并设置事件.

这个按钮被多次使用,我不希望事件堆叠.因此,我已经取消订阅了finally块中的事件.

代码类似于以下内容:

try {
bar = new foo();
bar.event += new event(method);

dosomething()
}
finally {
bar.event -= new event(method);
}
Run Code Online (Sandbox Code Playgroud)

到目前为止似乎工作正常,但是我关注在doSomething方法完成之前正在处理的finally块,从而使用了事件.

是否允许该方法在调用finally块之前进行处理?

Dav*_*jak 6

我通常做的是有一个inEvent布尔变量,每次触发一个事件时都会检查它.代码如下所示:

bool inEvent = false;

...

private void Button1_Click(object source, EventArgs e) 
{
    if (inEvent)
        return;

    try 
    {
        inEvent= true;

        dosomething();
    }
    finally 
    {
        inEvent = false;
    }
}
Run Code Online (Sandbox Code Playgroud)