10 msごとに適切なイベントハンドラ(コールバック)を呼び出すSystem.Threading.Timerがあります。メソッド自体はであり、再入可能でないであり、時にはを10 msより長く取ることができます。したがって、メソッドの実行中にタイマーを停止したい。コールバックメソッドでタイマーを停止
コード:
private Timer _creatorTimer;
// BackgroundWorker's work
private void CreatorWork(object sender, DoWorkEventArgs e) {
_creatorTimer = new Timer(CreatorLoop, null, 0, 10);
// some other code that worker is doing while the timer is active
// ...
// ...
}
private void CreatorLoop(object state) {
// Stop timer (prevent reentering)
_creatorTimer.Change(Timeout.Infinite, 0);
/*
... Work here
*/
// Reenable timer
_creatorTimer.Change(10, 0);
}
MSDNには、コールバックメソッドは、スレッドプールとは別のスレッドで(毎回タイマーがトリガー)と呼ばれていると述べています。つまり、メソッドの最初のものをタイマーで止めても、タイマーを停止させる機会がある前に、メソッドの別のインスタンスを起動して実行する必要はありません。
タイマー(または非リエントラントメソッド自体)をロックする必要がありますか? コールバック(および非リエントラント)メソッドの実行中にタイマーが起動しないようにする正しい方法は何ですか?
この質問はあなたを助けるかもしれhttp://stackoverflow.com/questions/1116249/manualresetevent-vs-thread-sleep – Kane