Принудительный тик таймера (включая асинхронное поведение)

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

Извлечение конфигурации — довольно трудоемкий процесс, поэтому я хочу форсировать событие таймера «Tick», но я не могу просто вызвать timer_tick(bla,bla,bla), потому что он будет выполняться синхронно.

Есть ли простой способ заставить таймер «тикать» (без создания нового потока)? Поведение должно «сбрасывать» оставшееся время таймера (так, если изначально таймер был установлен на 2-минутный интервал и 1 минута уже прошла — после принудительного «Tick» — таймер снова начнет отсчет 2 минут)


person Nissim    schedule 06.05.2010    source источник


Ответы (2)


изменить значение тайм-аута.

person thelost    schedule 06.05.2010
comment
Спасибо, чувак... Я создал простое приложение, чтобы проверить влияние изменения тайм-аута во время работы таймера, и оно прекрасно работает. Что я сделал, так это изменил интервал таймера на 1 (минимально возможный), Thread.Sleep(1) и сброс интервала до исходного значения... работал как шарм - person Nissim; 06.05.2010

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

Может быть, вы просто поместите этот dis- и enable непосредственно перед и после вызова вашего долго работающего процесса, например:

timer.Enabled = false;
LongRunningSyncProcess();
timer.Enabled = true;
person Oliver    schedule 06.05.2010
comment
LongRunningSyncProcess() будет работать синхронно - именно то, чего я не хотел - person Nissim; 06.05.2010