我編寫了一個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