using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Threading; namespace SteamWorkshopLib { public class TimerTick { private Task Task_; private DispatcherTimer DispatcherTimer_; private int time = 1; /// /// Время в миллисекундах. /// public int Time { get => time; set { time = value <= 0 ? 1 : value; if (DispatcherTimer_ == null) return; Update(); } } private void Update() => DispatcherTimer_.Interval = new TimeSpan(0, 0, 0, 0, time); /// /// Подписка на событие. /// public event EventHandler Tick; public TimerTick() => Time = 1; /// /// Запуск таймера в др. потоке. /// public void Start() { if (DispatcherTimer_ == null || Tick != null) { DispatcherTimer_ = new DispatcherTimer(); DispatcherTimer_.Tick += Tick; DispatcherTimer_.Interval = new TimeSpan(0, 0, 0, 0, Time); Task_ = new Task(DispatcherTimer_.Start); Task_.Start(); } } /// /// Остановка таймера и потока. /// public void Stop() { if (DispatcherTimer_ == null) return; DispatcherTimer_.Stop(); Task_.Wait(); } } }