c# 事件处理程序被添加两次

标签 c# event-handling timer

这是一个虚构的例子,但我想知道如果 InitialiseTimer 函数被调用两次会发生什么。计时器已用函数是否被触发两次。如果函数是静态的,这会改变吗?

    private static void InitialiseTimer()
    {
            TheTimer = new System.Timers.Timer();
            TheTimer.Interval = 400;
            TheTimer.Elapsed += new ElapsedEventHandler(TheTimer_Elapsed);
            TheTimer.AutoReset = false;
    }   

    public void TheTimer_Elapsed(object sender, ElapsedEventArgs e)
    {
        //Do stuff in here
    }

我打算在下面使用来防止这种情况

Has an event handler already been added?

谢谢, 理查德

最佳答案

如果您两次注册事件处理程序,则每次引发事件时都会调用两次。

如果您将 TheTimer_Elapsed 设置为静态,这不会改变,因为您仍将持有对该静态方法的两个引用。

在大多数情况下,没有必要像 Blair Conrad 在您链接到的问题中发布的那样编写复杂的内容。只是不要忘记每次使用 += 时都使用 -= ,这样你就安全了。

关于c# 事件处理程序被添加两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5180695/

上一篇:C# 方法隐藏

下一篇:c# - foreach循环问题

相关文章:

multithreading - 可能/推荐在 Go 中编写事件驱动的应用程序?

c++ - 为什么不在 linux 上使用系统定时器(timerfd)?

c++ - 用于定期网络摄像头帧捕获的中断定时器 C++

c# - 如何从用户定义类列表中删除一个元素?

c# - 为什么现在 ASP.NET 母版页上的 Context.User 为空?

c++ - 如何在接收器对象上实现传出接口(interface) (C++)

c - 具有分离线程的超时事件设计

c# - dll 和 nuget 包有什么区别?

c# - 如何在 ASP.NET MVC 中应用长轮询技术?

javascript - 使用 useEffect() 钩子(Hook)处理关键事件的正确方法是什么,另一方面触发本地状态更改?