Интервал управления таймером - PullRequest
1 голос
/ 19 мая 2011

Я использовал один элемент управления таймером в моем проекте C # .net, интервал таймера 5 секунд.В методе timer_tick я вызываю другой метод расчета, который займет 5 минут.Мой вопрос заключается в том, что метод timer_tick будет вызываться каждые 5 секунд или он будет ждать завершения предыдущего процесса?В моем тестировании я записываю текущее время в окно вывода перед вызовом метода расчета.Итак, я обнаружил, что он всегда ожидает завершения предыдущего процесса. Если это правильно, то для чего нужен интервал таймера?Мой код тестирования такой,

private void timer1_Tick(object sender, EventArgs e)
{ 
    Console.WriteLine(DateTime.Now.ToString());
    CalculationMethod();
}

С уважением,

Инди

Ответы [ 4 ]

4 голосов
/ 19 мая 2011

Это полностью зависит от типа таймера, который вы используете! Следующая статья дает исчерпывающее руководство по поведению 3 рамочных таймеров:

http://msdn.microsoft.com/en-us/magazine/cc164015.aspx

Некоторые гарантируют постоянный тик (насколько это возможно), другие будут пропускать или приостанавливать свои тики.

2 голосов
/ 19 мая 2011

Событие Tick выполняет блокирующий (синхронный) вызов метода timer1_Tick, поэтому, если метод занимает очень много времени, он будет ждать. Он предназначен для вещей, которые могут быть завершены в данный период времени.

Если вам действительно нужно вызывать этот метод каждые 5 секунд, порождайте новые потоки для них на каждом проходе:

private void timer1_Tick(object sender, EventArgs e)
{ 
    Console.WriteLine(DateTime.Now.ToString());
    Task.Factory.StartNew(() => CalculationMethod());
}
1 голос
/ 19 мая 2011

Посмотрите на замечания на этой MSDN странице . Управление таймером является однопоточным, поэтому оно будет ожидать завершения первого события. Вы должны взглянуть на Класс таймеров

1 голос
/ 19 мая 2011

Он ждет, потому что timer1_Tick не может вернуться до того, как CalculationMethod вернется.Если вы не хотите ждать CalculationMethod, вы должны реализовать его как асинхронный вызов (например, для работы в фоновом режиме).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...