C# - тик таймера остановки Win Form - PullRequest
0 голосов
/ 06 августа 2020

Это моя реализация приложения Win Form с таймером обратного отсчета:

readonly DateTime myThreshold;
public Form1()
{
    InitializeComponent();

    myThreshold = Utils.GetDate();
    Timer timer = new Timer();
    timer.Interval = 1000; //1 second
    timer.Tick += new EventHandler(t_Tick);
    timer.Start();

    //Threshold check - this only fires once insted of each second
    if (DateTime.Now.CompareTo(myThreshold) > 0)
    {
        // STOP THE TIMER
        timer.Stop();
    }
    else
    {
        //do other stuff
    }
}

void t_Tick(object sender, EventArgs e)
{
    TimeSpan timeSpan = myThreshold.Subtract(DateTime.Now);
    this.labelTimer.Text = timeSpan.ToString("d' Countdown - 'hh':'mm':'ss''");
}

Требуемое поведение - остановить таймер и отметку функция при достижении порога.

Теперь этого не происходит, потому что проверка выполняется только один раз, так как она помещается в инициализацию формы 1.

Существует ли способ добавить эту проверку в способ немедленно остановить таймер после выполнения условия?

1 Ответ

2 голосов
/ 06 августа 2020

Если мы определим timer как поле класса (чтобы к нему можно было получить доступ из всех методов в классе), тогда мы можем просто добавить проверку к самому событию Tick и остановить таймер оттуда:

private Timer timer = new Timer();

void t_Tick(object sender, EventArgs e)
{
    // Stop the timer if we've reached the threshold
    if (DateTime.Now > myThreshold) timer.Stop();

    TimeSpan timeSpan = myThreshold.Subtract(DateTime.Now);
    this.labelTimer.Text = timeSpan.ToString("d' Countdown - 'hh':'mm':'ss''");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...