2010-10-15 3 views
3

У меня есть таймер, который не запускает связанную функцию, когда время истекает. Я установил событие Tick. Я установил Interval недвижимость 12000, и я сделал myTimerObject.Start();.Работают ли таймеры при запуске с BackgroundWorker?

Я все же отправил этот таймер в отдельную нить (где-то в BackgroundWorker). Моя теория заключается в том, что, хотя таймер, кажется, начинается правильно, поток уничтожается после завершения BackgroundWorker функции DoWork, и это, в свою очередь, также приводит к уничтожению события таймера.

Это правда? Существуют ли другие возможные причины, по которым событие таймера не происходит?

+0

Что вы пытаетесь сделать с таймером? Какой это таймер (System.Threading, System.Windows.Forms, System.Timers). Это важно. Отправьте свой код и прочитайте эту ссылку, ожидая ответа. http://msdn.microsoft.com/en-us/magazine/cc164015.aspx –

ответ

4

Pieter, проблема заключается не в потоке, с которого запускается Таймер, а в том, что вы не держите ссылку на него, поэтому он получает мусор.

С MSDN documentation по таймеру (смотрите примечание в разделе «Примечания»):

Пока вы используете таймер, вы должны сохранить ссылку на него. Как и в случае с , любой управляемый объект, Таймер является предметом для сбора мусора, когда есть Нет ссылок на него. Тот факт, что таймер по-прежнему активен, не предотвращает его сбор .

+0

Вы сказали это гораздо более красноречиво :-) – 2010-10-15 20:44:49

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