C# - 确保事件不堆叠

标签 c# events

你好,

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

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

代码类似下面:

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

dosomething()
}
finally {
bar.event -= new event(method);
}

到目前为止它似乎工作正常,但是我担心在 doSomething 方法完成之前处理 finally block 并因此使用该事件。

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

最佳答案

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

bool inEvent = false;

...

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

    try 
    {
        inEvent= true;

        dosomething();
    }
    finally 
    {
        inEvent = false;
    }
}

关于C# - 确保事件不堆叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5352874/

相关文章:

javascript - 如何在 Controller 操作中使用模型属性填充数组并传递给 View ?

Javascript添加监听器错误: TypeError: trigger. addEventListener不是函数

javascript - keyup 事件监听器中的 jQuery 单击事件监听器

c# - 正在运行的BackgroundWorker的处理

c# - 如何以编程方式删除 Windows 媒体播放列表

c# - 从数字 XDocument 中选择一个元素

c# - 不同可能的子类的函数返回列表

oop - 如何改进事件类的层次结构?

javascript - JQuery 彩色动画不能可靠地触发

javascript - "request"和 "response"是从哪里来的,我怎么知道的?