Почему 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 шт):

Автор решения: aepot

Используйте другой таймер 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.

→ Ссылка