私は、経過イベントハンドラを同時に処理しないタイマーがあります。しかし、1つの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();
}
}
}
これはコミュニティのWikiであってはいけません。 – Samuel
@Samuel - ポスターの希望があれば、どんな質問もコミュニティウィキになることがあります。 FAQは、いくつかの質問が最初からコミュニティwikiでなければならないことを明記していますが、CWをどのような質問にも適用することを制限しません。 – tvanfosson
@tvanfosson:私は彼に、これらのような質問はコミュニティのwikiであってはならないことを知らせていました。 – Samuel