我编写了一个Timer类,以便在轮询另一个系统的Windows服务中使用它。我这样做是因为我有两个问题,System.Timers.Timer
没有解决。投票窗口服务的计时器
- Elapsed EventHanler在后台运行,因此如果主线程结束,它的执行将中止。我希望
System.Timers.Timer.Stop
函数可以阻止主线程,直到Elapsed EventHanler的执行结束。 System.Timers.Timer
不涉及事件再入境。我希望间隔在两个Elapsed EventHanler之间,这样如果前一个调用(+间隔)尚未完成,定时器就不会调用Elapsed EventHanler。
在写我发现我需要一些thrading相关的问题,因为我不是太那些我想知道,如果下面的Timer类是线程安全的经验,以DAEL类?
public class Timer
{
System.Timers.Timer timer = new System.Timers.Timer() { AutoReset = false };
ManualResetEvent busy = new ManualResetEvent(true);
public double Interval
{
get { return timer.Interval; }
set { timer.Interval = value; }
}
public Timer()
{
timer.Elapsed += new ElapsedEventHandler(TimerElapsed);
}
void TimerElapsed(object sender, ElapsedEventArgs e)
{
try
{
busy.Reset();
OnElapsed(e);
timer.Start();
}
finally
{
busy.Set();
}
}
public event EventHandler Elapsed;
protected void OnElapsed(EventArgs e)
{
if (Elapsed != null)
{
Elapsed(this, e);
}
}
public virtual void Start()
{
busy.WaitOne();
timer.Start();
}
public virtual void Stop()
{
busy.WaitOne();
timer.Stop();
}
}
此解决方案不能解决1中描述的问题。 – Martin 2009-11-25 08:38:36