我有一個計時器,需要不在同一時間處理其流逝的事件處理程序。但處理一個Elapsed事件可能干擾他人。我實施了以下解決方案,但感覺有些問題;看起來好像我應該使用不同的計時器或使用線程空間內的另一個對象。計時器似乎最適合,因爲我確實需要定期檢查狀態,但有時檢查時間會比我的時間間隔長。這是處理這個問題的最好方法嗎?如何在處理已經過的事件時阻塞計時器?
// member variable
private static readonly object timerLock = new object();
private bool found = false;
// elsewhere
timer.Interval = TimeSpan.FromSeconds(5).TotalMilliseconds;
timer.Elapsed = Timer_OnElapsed;
timer.Start();
public void Timer_OnElapsed(object sender, ElapsedEventArgs e)
{
lock(timerLock)
{
if (!found)
{
found = LookForItWhichMightTakeALongTime();
}
}
}
這不應該是一個社區維基。 – Samuel 2009-05-02 16:39:09
@Samuel - 如果海報需要,任何問題都可以是社區wiki。常見問題解答僅指定一些問題從一開始就應該是社區wiki,但不限制將CW應用於任何問題。 – tvanfosson 2009-05-02 16:43:38
@tvanfosson:我讓他知道像這些問題不應該是社區維基。 – Samuel 2009-05-02 17:02:19