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();
}
}