Использование таймера только один раз - PullRequest
8 голосов
/ 15 мая 2010

Я хочу использовать таймер только один раз, через 1 секунду после инициализации моей основной формы. Я думал, что у следующего будет окно с сообщением «Hello World» только один раз, но на самом деле новое окно сообщения говорит «Hello World» каждую секунду.

Почему так? Я поставил t.Stop() в тик. Кроме того, нужно ли как-то утилизировать таймер, чтобы избежать утечки памяти?

        Timer t = new Timer();
        t.Interval = 1000;                
        t.Tick += delegate(System.Object o, System.EventArgs e)
                        { MessageBox.Show("Hello World"); t.Stop(); };

        t.Start();   

Пожалуйста, помогите и покажите, есть ли лучший способ сделать это? Спасибо.

Ответы [ 3 ]

9 голосов
/ 15 мая 2010

Заменить MessageBox.Show("Hello World"); t.Stop(); на t.Stop();MessageBox.Show("Hello World");. Поскольку вы не нажимаете OK вовремя, таймер уже снова отмечен, и вы так и не достигли кода остановки.

2 голосов
/ 15 мая 2010

Положите t.Stop(); перед MessageBox.Show("Hellow World");

1 голос
/ 22 июня 2017

Этого также можно добиться с помощью System.Timers.Timer и установки AutoReset в false. Я смотрел, какой таймер использовать, и предпочел этот, так как он не требует отдельной команды остановки.

using System;
using System.IO;
using System.Timers;

System.Timers.Timer t = new System.Timers.Timer() {
    Interval = 1000,
    AutoReset = false
};

t.Elapsed  += delegate(System.Object o, System.Timers.ElapsedEventArgs e)
    { Console.WriteLine("Hell");}; 
t.Start();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...