Ответ 1
Если вам нужен таймер в Windows Form, то оставьте System.Windows.Forms.Timer
на форму - нет причин использовать System.Threading.Timer
, если вам не требуется лучшее разрешение, чем 55 мс.
Причина, по которой таймер "останавливается", заключается в том, что он собирает мусор. Вы разрешаете ему выйти из области видимости в методе Form1_Load
, потому что вы объявляете его только как локальную переменную. Чтобы сохранить таймер "живой", он должен быть частным полем класса формы, чтобы GC знал, что он все еще нужен.
Другими словами:
public partial class Form1 : Form
{
private System.Threading.Timer testTimer;
...
public void Form1_Load(object sender, EventArgs e)
{
TimerCallback timerDelegate = new TimerCallback(tick);
testTimer = new System.Threading.Timer(timerDelegate, null, 1000, 1000);
}
}
Но опять же, в этом случае проще использовать System.Windows.Forms.Timer
, который является фактическим компонентом в панели инструментов, который вы можете просто добавить в форму.
Изменить. Как теперь показывают комментарии, если это просто тестовое приложение, а реальное приложение находится в службе Windows, вы не можете использовать для этого System.Windows.Forms.Timer
. Просто не забывайте, чтобы ваш System.Threading.Timer
вышел из сферы действия.