Использование таймера для однопоточных и многопоточных приложений

Таймеры нужны для того, чтобы с определённым интервалом выполнять необходимые блоки кода
Использования таймера для однопоточного приложения:
— Обычный таймер System.Timers.Timer, который выполняется бесконечно долго, пока работает Программа:

public void MainMethod()
{
var temp = new System.Timers.Timer(3000); // 3 секунды
temp.Elapsed += OnTimeEvent;
temp.AutoReset = true;
temp.Enabled = true;
}
private void OnTimeEvent(Object source, ElapsedEventArgs e)
{
//Do something;
}

— Таймер System.Timers.Timer с возможностью завершения извне:

public MainMethod()
{
using (new Timer(DoSmth, exitEvent, 0, 500)) // метод DoSmth выполняется с интервалом 500 мс, пока внутри него не будет вызван exitEvent.Set()
{
exitEvent.WaitOne(60000, false); // принудительное завершение таймера через 1 минуту
}
}
private DoSmth(object state)
{
var exitEvent = (AutoResetEvent) state;
for(int i=0; i<100; i++) { if( i==50 ) exitEvent.Set(); // сигнал таймеру о том, что необходимо завершить работу таймера } }

Использования таймера для многопоточного приложения:
- Таймер System.Windows.Threading.DispatcherTimer:
В случае, если необходимо внутри таймера создавать фоновые потоки и, получая из них обновлённые значения, присваивать переменным основного потока, чтобы при этом данные могли обновляться в основном потоке (т.е. чтобы происходила синхронизация данных), например если эти данные используются для отображения в Пользовательском интерфейсе, можно использовать DispatcherTimer:
public MainMethod()
{
var temp = new System.Windows.Threading.DispatcherTimer();
temp.Interval = new TimeSpan(0,1,0); // интервал - 1 минута
temp.Tick += OnTickEvent;
temp.Start();
}
private void OnTickEvent(object sender, object e)
{
// Do something;
}

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.