using System; using Abp.Threading.Timers; namespace Abp.Threading.BackgroundWorkers { /// /// Extends to add a periodic running Timer. /// public abstract class PeriodicBackgroundWorkerBase : BackgroundWorkerBase { protected readonly AbpTimer Timer; /// /// Initializes a new instance of the class. /// /// A timer. protected PeriodicBackgroundWorkerBase(AbpTimer timer) { Timer = timer; Timer.Elapsed += Timer_Elapsed; } public override void Start() { base.Start(); Timer.Start(); } public override void Stop() { Timer.Stop(); base.Stop(); } public override void WaitToStop() { Timer.WaitToStop(); base.WaitToStop(); } /// /// Handles the Elapsed event of the Timer. /// private void Timer_Elapsed(object sender, System.EventArgs e) { try { DoWork(); } catch (Exception ex) { Logger.Warn(ex.ToString(), ex); } } /// /// Periodic works should be done by implementing this method. /// protected abstract void DoWork(); } }