这是一个虚构的例子,但我想知道如果 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/