private ThreadPoolTimer (TimeElapsedHandler handler, TimeSpan delay, bool isPeriodic)
{
Delay = delay;
if (isPeriodic)
Period = delay;
this.handler = handler;
this.realTimer = new Timer (t =>
{
var ltimer = (ThreadPoolTimer)t;
if (!ltimer.isCanceled)
{
Task.Factory.StartNew (o =>
{
ThreadPoolTimer taskedTimer = (ThreadPoolTimer)o;
taskedTimer.handler (taskedTimer);
}, ltimer);
}
}, this, (int)delay.TotalMilliseconds, (isPeriodic) ? (int)delay.TotalMilliseconds : Timeout.Infinite);
}