Если у меня есть активный System.Threading.Timer, и я установил его в null, он остановлен?
Я понимаю, что правильнее называть .Dispose()
, но я хотел бы ответить на вопрос, как написано.
public class Foo
{
private System.Threading.Timer _timer;
public Foo()
{
// initialize timer
}
public void KillTimer()
{
_timer=null;
}
}
Обновление:
После многого назад о том, будет ли установка единственной ссылки на System.Threading.Timer на null, действительно приведет к остановке, она показала, что
- нет никаких затяжных ссылок, например. список событий, поскольку таймер потоковой передачи принимает обратный вызов sinlge и не выдает события.
- что GC , если собирает GC, финализатор действительно удалит TimerBase и остановит таймер.
шип
using System;
using System.Threading;
namespace SO_3597276
{
class Program
{
private static System.Threading.Timer _timer;
static void Main(string[] args)
{
_timer = new Timer((s) => Console.WriteLine("fired"), null, 1000, Timeout.Infinite);
_timer = null;
GC.Collect();
Console.ReadKey();
}
}
}
Обратный вызов таймера не вызывается. Удалите GC.Collect()
и вызывается обратный вызов.
Спасибо всем.