Таймер обратного отсчета с нумерацией вниз - PullRequest
0 голосов
/ 29 марта 2020

В приложении Winforms есть 3 различных числовых значения вниз, таких как min, se c, миллисекунды. Как я могу сделать таймер, который отсчитывает значение ввода числовых вниз? Я пытался с другими блоками. Я также видел много тайм-тайм-титулов на inte rnet. Что лучше для этого отсчета? если еще блокирует или таймпоун

numericUpDownMiliSn.Value--;

if (numericUpDownMiliSn.Value == 0)
{
    if (numericUpDownMiliSn.Value == 0 && numericUpDownSn.Value == 0 && numericUpDownDk.Value == 0)
    {
        timer2.Stop();
        button2.Text = "Baslat";
        durum = false;
    }
    else
    {
        if (numericUpDownSn.Value > 0)
        {
            numericUpDownSn.Value--;
            numericUpDownMiliSn.Value = 60;
        }
        else
        {
            numericUpDownMiliSn.Value = 60;
        }

        if (numericUpDownSn.Value > 0)
        {
            numericUpDownSn.Value--;
            numericUpDownSn.Value = 60;
        }
    }
}

1 Ответ

0 голосов
/ 30 марта 2020

Из моих комментариев в исходном вопросе выше:

Таймеры в WinForms НЕ являются точными, поэтому вам не следует основывать свое время на увеличении / уменьшении времени в событии Tick (). Вам определенно следует использовать TimeSpan (полученный из вычитания текущего времени из некоторого будущего целевого времени; на основе начальных значений в ваших NumericUpDowns) ... затем просто обновить NumericUpDowns числами в TimeSpan.

Вот как может выглядеть этот код:

private DateTime targetDT;

private void button1_Click(object sender, EventArgs e)
{
    TimeSpan ts = new TimeSpan(0, 0, (int)numericUpDownMn.Value, (int)numericUpDownSn.Value, (int)numericUpDownMiliSn.Value);
    if (ts.TotalMilliseconds > 0)
    {
        button1.Enabled = false;
        numericUpDownMn.Enabled = false;
        numericUpDownSn.Enabled = false;
        numericUpDownMiliSn.Enabled = false;
        targetDT = DateTime.Now.Add(ts);
        timer1.Start();
    }
}

private void timer1_Tick(object sender, EventArgs e)
{
    TimeSpan ts = targetDT.Subtract(DateTime.Now);
    if (ts.TotalMilliseconds > 0)
    {
        numericUpDownMn.Value = ts.Minutes;
        numericUpDownSn.Value = ts.Seconds;
        numericUpDownMiliSn.Value = ts.Milliseconds;
    }
    else
    {
        timer1.Stop();
        numericUpDownMn.Value = 0;
        numericUpDownSn.Value = 0;
        numericUpDownMiliSn.Value = 0;
        button1.Enabled = true;
        numericUpDownMn.Enabled = true;
        numericUpDownSn.Enabled = true;
        numericUpDownMiliSn.Enabled = true;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...