2013-09-20 4 views
0

Каков наилучший способ задержки операции на пару секунд? я нашел следующий код на StackOverflow:C# Задержка операции без утечки памяти

var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(5) }; 
timer.Start(); 
timer.Tick += (_sender, _args) => 
{ 
    timer.Stop(); 
    operation(); 
}; 

, но я не думаю, что сборщик мусора достаточно умен, чтобы удалить этот таймер из памяти, поскольку он не знает, что Tick зависит от Start/Stop операций и таймер больше не включается.

Я думаю, мне нужно будет удалить мероприятие первым, но для этого мне нужно будет извлечь лямбду на отдельным методом. Есть ли лучший способ просто задержать операцию?

+1

Посмотрите на 'System.Threading.SpinWait' – Oliver

ответ

-1

Почему бы не избавиться от таймера, а затем установить значение null?

var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(5) }; 
timer.Start(); 
timer.Tick += (_sender, _args) => 
{ 
    timer.Stop(); 
    //timer.Dispose(); <-- Not available on a dispatch timer 
    timer = null; 
    operation(); 
}; 
+0

, потому что у таймера нет никакого метода' Dispose' – Adassko

+0

Да, извините, я думал, что это обычный таймер. Тем не менее, настройка на null должна делать трюк, не так ли? – Neil

+0

Я так не думаю, потому что ссылка на этот таймер ушла, когда функция заканчивается в любом случае – Adassko

0

Вопрос в том, что «операция» вы пытаетесь отложить. Если это текущий поток, чем решение Soner Gönül, это путь. Он также сигнализирует приложению перенести на другой поток.

Смежные вопросы