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

pro*_*ach 1 c# timer event-handling

这是一个虚构的例子,但是我在游荡如果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
    }
Run Code Online (Sandbox Code Playgroud)

我打算用下面来防止这种情况发生

是否已添加事件处理程序?

谢谢,理查德

Ily*_*gan 5

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

如果你创建TheTimer_Elapsed静态,这不会改变,因为你仍然会持有两个对这个静态方法的引用.

在大多数情况下,没有必要像布莱尔康拉德在你所链接的问题中所写的那样编写复杂的内容.只要不要忘记-=每次都使用+=,你就会安全.