Цитата из спецификации языка C # 3.9:
'2.Если объект или любая его часть не могут быть доступны с помощью какого-либо возможного продолжения выполнения, кроме запуска деструкторов, объект считается больше не используемым, и он становится пригодным для уничтожения ...
Например, будет ли DispatcherTimer иметь право на сборку мусора до того, как сработает событие Tick?
public void DispatchCallbackAfter(Action callback, TimeSpan period)
{
DispatcherTimer timer = new DispatcherTimer(DispatcherPriority.Normal, AppSettings.MainWindow.Dispatcher);
timer.Tick += new EventHandler(DispatchCallback);
timer.Interval = period;
timer.Tag = new object[] {timer, callback};
timer.Start();
}
private void DispatchCallback(object sender, EventArgs args)
{
DispatcherTimer t = (DispatcherTimer)sender;
t.Stop();
((Action)((object[])t.Tag)[1])();
}
ПРИМЕЧАНИЕ. В timer.Tag есть собственная ссылка на таймер, но я полагаю, что это не будетразница?