Почему Timer работает только 2 раза?
Задача таймера вызывать функцию каждые 7 минут, но почему-то таймер вызывается только 1 раз, прочитал что это связано с локальным объявлением таймера, но точно не понял в чем ошибка.
как мне сделать таймер, работающий до закрытия приложения?
private void Form1_Shown(object sender, EventArgs e)
{
textBox1.Text = InputValue();
UpdateTimer();
}
private void UpdateTimer()
{
System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = 420000;
timer.AutoReset = true;
timer.Elapsed += Form1_Shown;
timer.Start();
}
Ответы (1 шт):
Используйте другой таймер System.Windows.Forms.Timer. Еще у вас бесконечная рекурсия с перезапусками таймера, который перезапускает сам себя. Вынесите то, что должно происходить в таймере в отдельный метод.
Для запуска процессов используйте лучше обработчик Form.Load, а не Form.Shown, чтобы к моменту показа пользователю форма цже была загружена полностью.
private void Form1_Load(object sender, EventArgs e)
{
textBox1.Text = InputValue();
Timer timer = new Timer();
timer.Tick += (s, e) => { textBox1.Text = InputValue(); };
timer.Interval = 420000;
timer.Start();
}
И нет, ваша проблема не связана с локальным объявлением, скорее с тем, что вы пытаетесь получить доступ к контролам из стороннего потока, там выбрасывается исключение при доступе к textBox1 из стороннего потока, но так как оно происходит не в основном потоке и вы его никак не перехватываете с помощью try-catch - то соответственно и не видите. Поэтому лучше использовать именно таймер, который специально адаптирован для работы с UI Winforms.