1

MSDN から:

Timer.Elapsed イベントは ThreadPool スレッドで発生するため、Timer.Stop メソッドの呼び出しが別のスレッドで実行されると同時に、イベント処理メソッドが 1 つのスレッドで実行される可能性があります。これにより、Stop メソッドが呼び出された後に Elapsed イベントが発生する可能性があります。

特定の時間実行してから経過してフラグを設定するタイマーがあります。時々、タイマーを停止して再起動したいことがあります。

現在、タイマーを停止しようとすると、経過イベントがまだ発生することがあるため、発生させたくないときにフラグが設定されます。

フラグを停止して経過イベントが発生しないようにするにはどうすればよいですか?

**編集**

イベント ハンドラーでは、コードを実行する前にタイマーの状態をチェックして、有効になっていることを確認しました。また、タイマーを停止するときにフラグを設定し、コードを実行する前にそのフラグをチェックしようとしました。

どちらも働かない

4

2 に答える 2

0
        Timer t = new Timer(4000);
        t.Elapsed += t_Elapsed;
        t.Stop();
        t.Dispose();

最後の行はタイマーを削除して、経過イベントが発生しないようにします。

stop と dispose が呼び出されたときにタイマーが既に経過関数を実行している場合、実行は完了します。

于 2012-11-30T23:34:03.143 に答える