Если вам нужен таймер в форме Windows, тогда добавьте System.Windows.Forms.Timer
в форму - нет смысла использовать System.Threading.Timer
, если вам не нужно лучшее разрешение, чем 55 мс.
Причина, по которой таймер«останавливается», потому что это мусор.Вы позволяете ему выйти из области видимости в методе Form1_Load
, потому что вы объявляете его только как локальную переменную.Чтобы таймер оставался «живым», он должен быть приватным полем в классе формы, чтобы сборщик мусора знал, что он все еще необходим.
Другими словами:
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
не выходил за рамки.