Как запретить таймеру запускать задержку при первом ее запуске? - PullRequest
3 голосов
/ 14 марта 2012

У меня есть таймер, который выполняет определенное действие, когда он работает (интервал 1000 мс). Есть ли какой-нибудь способ предотвратить запуск таймером задержки и в первый раз вместо того, чтобы войти в функцию и начать делать код?

private void timer_Tick(object sender, EventArgs e)
{
    labelStatus.Text = "Waiting for next file" + "(" + (class.property / 1000).ToString("#0.##0") + " seconds)";
    class.property -= 1000;
}

Я хочу, чтобы таймер сразу начал отсчитывать (обновлять метку) вместо ожидания за 1 секунду до первого обновления метки

Ответы [ 3 ]

3 голосов
/ 14 марта 2012

Вместо того, чтобы говорить о том, как вы, вы можете просто выполнить код, который должен выполнять ваш таймер, когда он включается прямо перед включением.

Пример:

public Main()
{
    DoWork();
    Timer1.Enabled = true;
}


protected void Timer1_Tick(object sender, args e)
{
    DoWork();
}
3 голосов
/ 14 марта 2012

Что мешает вам извлечь код, запущенный в событии Timer_Elapsed, и создать автономную процедуру (иначе Refactoring).
Как только ваша процедура вызывает ее непосредственно перед запуском таймера.

Например, изэто:

private void Timer_Elapsed(object sender, TimerElapsedEventArgs e)
{
    int a = 0;
    for(i=0; i<100;i++)
       a += i;
}

до ....

private void Timer_Elapsed(object sender, TimerElapsedEventArgs e)
{
    ExecuteCalc();
}
private void ExecuteCalc()
{
    int a = 0;
    for(i=0; i<100;i++)
       a += i;
}

и в вашем коде:

ExecuteCalc();
Timer1.Enabled = true;
0 голосов
/ 14 марта 2012

Вы можете просто «подделать» вызов обработчику тиков следующим образом:

timer_Tick(null, null);

при первом запуске таймера.Однако это дурной тон, и лучше извлечь его код (рефакторинг) в метод и вызвать метод.Затем пусть ваш обработчик вызовет тот же метод, что и Стив:

private void timer_Tick(object sender, EventArgs e)
{
     UpdateLabel();
}

private UpdateLabel() 
{
    labelStatus.Text = "Waiting for next file" + "(" + (class.property / 1000).ToString("#0.##0") + " seconds)";
    class.property -= 1000;
}

Теперь вызовите его так, как Джефф показал вам:

UpdateLabel();
timer.Enable = true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...