В моем проекте я создал объект System.Timers.Timer
и интервал установлен в 10 мин. На каждые 10 минут я получаю истекшее событие. В этом обработчике событий я выполняю некоторый код.System.Timers.Timer enabled and GarbageCollector
Перед выполнением этого кода я устанавливаю значение Enabled
, равное false
, потому что если обработчик занимает больше времени, чем следующий интервал, другой поток выполняет истекшее событие.
Проблема здесь внезапно Elapsed
мероприятие остановлено.
Я прочитал несколько статей и заподозрил, что момент, когда свойство свойства установлено в false garbagecollector, освобождает объект таймера.
Если это правильно, сообщите мне решение.
Ниже приведен пример кода:
public class Timer1
{
private static System.Timers.Timer aTimer;
public static void Main()
{
// Create a timer with a ten second interval.
aTimer = new System.Timers.Timer(10000);
// Hook up the Elapsed event for the timer.
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
// Set the Interval to 10min.
aTimer.Interval = 600000;
aTimer.Enabled = true;
Console.WriteLine("Press the Enter key to exit the program.");
Console.ReadLine();
}
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
aTimer.Enabled = false;
// excutes some code
aTimer.Enabled = true;
}
}
Какая ссылка для этой статьи? Это звучит неправильно для меня. Какая причина, по которой GC собирает все еще ссылающийся объект с свойством, установленным на какое-то значение? Это очень необычное поведение GC в .NET. – abatishchev
Спасибо за ваш ответ. . Посмотрите на приведенные ниже журналы, в которых указано, что «когда свойство Enabled установило его на false, оно было отмечено для GC, чтобы он мог освобождать ресурсы, удерживаемые таймером». http://forums.codeguru.com/printthread. PHP? т = 342524 http://kvarnhammar.blogspot.com/2008/12/systemwindowsformstimer-and-garbage.html http://stackoverflow.com/questions/14617336/garbage-collection-and-gchandle- alloc http://stackoverflow.com/questions/14216098/why-does-a-timer-keep-my-object-alive – user2080185