Они будут собраны после того, как метод оставлен. TimerElapsed
будет вызываться или не вызываться в зависимости от того, когда Timer
будет завершен. Скорее всего, он будет мертв задолго до того, как пройдет 1 секунда.
Когда вы вызываете Timer.Close()
, вы, таким образом, вызываете Timer.Dispose()
, который отменяет регистрацию таймера из очереди таймера, и в этом случае TimerElapsed не будет вызываться (конечно, если он не был вызван ранее).
Если вы оставите таймер не закрытым, GC даже вызовет Finalize()
, что, в свою очередь, вызовет Dispose()
. Но нет точных знаний, когда это произойдет:)
См. Пример ниже, Console.Out.WriteLine("called!!!")
никогда не выполнится:
using (System.Timers.Timer NewTimer = new System.Timers.Timer())
{
NewTimer.AutoReset = false;
ElapsedEventHandler TimerElapsed = (sender, args) => { Console.Out.WriteLine("called!!!"); };
NewTimer.Elapsed += new ElapsedEventHandler(TimerElapsed);
NewTimer.Interval = 1000;
NewTimer.Start();
}
Thread.Sleep(3000);