如何配置计时器

Ber*_*Cim 3 c#

我有以下代码使用System.Timers.Timer:

// an instance variable Timer inside a method
Timer aTimer = new Timer();
aTimer.Elapsed += new ElapsedEventHandler(OnElapsedTime);
aTimer.Interval = 300000;
aTimer.AutoReset = false;
aTimer.Enabled = true;
while (aTimer.Enabled)
{
    if (count == expectedCount)
    {
        aTimer.Enabled = false;
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

我有以下代码来处理事件:

private static void OnElapsedTime(Object source, ElapsedEventArgs e)
{
    // do something
}
Run Code Online (Sandbox Code Playgroud)

问题是:如果定时器事件被触发并进入OnElapsedTime,Timer对象是否会停止并被正确地垃圾收集?如果没有,我该怎么做才能正确处理Timer对象/停止它?我不希望计时器突然蠕动并在我的应用程序中造成破坏.

Eri*_*sen 9

调用Timer.Dispose:http: //msdn.microsoft.com/en-us/library/zb0225y6.aspx

private static void OnElapsedTime(Object source, ElapsedEventArgs e)
{
    ((Timer)source).Dispose();
}
Run Code Online (Sandbox Code Playgroud)

  • 处理是一种非常好的做法,但计时器应该在不再运行时适当地进行处理.无论如何,在调用Dispose方法之前,我将取消订阅事件处理程序:这将阻止进一步的意外回调. (3认同)

pin*_*chi 5

你不需要使用while循环,AutoReset = false已经确保Timer只触发一次。