2012-01-09 3 views
0

У меня есть 2 таймера. Один из них подсчитывает каждый раз, когда он тикает; используя постоянный интервал или один случайный порог. Второй таймер отсчитывает до следующего тика в первом таймере.Как подсчитать время до следующего тика таймера?

Как прямо сейчас я делаю так:

private void btnStart_Click(object sender, EventArgs e) 
    { 
     nextClick = int.Parse(nudClickInterval.Value.ToString()); 

     if (nudPlusMinus.Value != 0) tmrClickInterval.Interval = random.Next(int.Parse(nudClickInterval.Value.ToString()) - int.Parse(nudPlusMinus.Value.ToString()), int.Parse(nudClickInterval.Value.ToString()) + int.Parse(nudPlusMinus.Value.ToString())); 
     else tmrClickInterval.Interval = int.Parse(nudClickInterval.Value.ToString()); 

     tmrClickInterval.Start(); 
    } 

    private void tmrClickInterval_Tick(object sender, EventArgs e) 
    { 
     if (nudPlusMinus.Value == 0) tmrClickInterval.Interval = int.Parse(nudClickInterval.Value.ToString()); 
     else tmrClickInterval.Interval = random.Next(int.Parse(nudClickInterval.Value.ToString()) - int.Parse(nudPlusMinus.Value.ToString()), int.Parse(nudClickInterval.Value.ToString()) + int.Parse(nudPlusMinus.Value.ToString())); 

     tmrNextClick.Interval = tmrClickInterval.Interval/10; 
     tmrNextClick.Start(); 
     content++; 
     nextClick = tmrClickInterval.Interval; 
     label1.Text = content.ToString(); 
    } 

    private void tmrNextClick_Tick(object sender, EventArgs e) 
    { 
     if (nextClick <= 0) tmrNextClick.Stop(); 
     else 
     { 
      nextClick = nextClick - (tmrClickInterval.Interval/10); 
      lblNextClickCount.Text = (nextClick/100).ToString(); 
     } 
    } 

Я настраиваю интервал моего обратного отсчета таймера с помощью интервала первого таймера разделив на 10. Проблема в том, что я получаю некоторые ошибки таких как: Value '0' is not a valid value for Interval. Interval must be greater than 0. на линии: tmrNextClick.Interval = tmrClickInterval.Interval/10;.

Я не уверен, как избежать ошибок, поэтому я считаю, что может быть лучший способ подсчета времени простоя до следующего таймера. Кроме того, я бы хотел, чтобы подсчет был в хорошем постоянном интервале, но я очень запутался и не знаю, как справиться с этой проблемой.

Надежды на помощь.

ответ

2

System.Windows.Forms.Timer имеет интервал int. Разделение числа, которое больше, чем 10 на 10, приводит к 0 (целочисленное деление!).

Попытайтесь использовать System.Timers.Timer, он имеет интервал типа double или отметьте 0 и назначьте 1 в этом случае.

+0

Спасибо за совет, чтобы попробовать использовать двойную версию интервала таймера. Может быть полезно. – HelpNeeder

+0

BTW. Один быстрый вопрос. Каков минимальный интервал таймера? – HelpNeeder

+1

с System.Windows.Forms.Timer его 1, для System.Timers.Timer этот парень говорит, что его 1/64 сек http://www.eggheadcafe.com/community/ask-dr-dotnetsky/12/61662/c- -timer-interval-below-164-sec-.aspx – Peter

Смежные вопросы