Winform で System.Windows.Forms.Timer を使用してタイマーを複数回開始および停止すると、バインドされたイベントが複数回実行されます。

シーン

C# でのタイマー関数の実装 (スケジュールされたタスクとメソッドを実行するまでの待機時間):

C# でタイマー関数を実装する (スケジュールされたタスクと特定のメソッドを実行するまでの待機時間)_C# タイマー 5 分_横暴な Rogue Temperament ブログ - CSDN ブログ

以上がタイマーの使い方についてです。

ボタンをクリックしてタイマーを開始し、停止ボタンをクリックしてタイマーを停止すると、複数回繰り返すとタイマーメソッドが繰り返し実行されることがわかりました。

次の状況を考えてください

C# でウィンドウを閉じてもイベントのサブスクリプションがキャンセルされず、イベントが繰り返し実行される問題の解決策:

C# でイベント サブスクリプションをキャンセルせずにウィンドウを閉じるとイベントが繰り返し実行される問題の解決策_C# でイベントのバインディングが重複する_横暴で不正な気質のブログ - CSDN ブログ

そのため、タイマーを停止するときは単に実行を停止するだけであり、タイマー実行のバインドを解除する具体的な方法はないと考えていました。

タイマーは一度初期化され、毎回新しいものではないため、タイマーを停止する場合は実行メソッドのバインドを解除する必要があります。

注記:

ブログ:
Domineering Rogue Temperament_C#、アーキテクチャ ロード、SpringBoot-CSDN ブログ

成し遂げる

1.タイマーを初期化する

Timer _timer = new Timer();

クラス変数として使用する

2.タイマーをスタートする

_timer.Interval = scheduleInterval;                 
_timer.Tick += _timer_Tick;
_timer.Start();

3. タイマーを停止する

_timer.Tick -= _timer_Tick;
_timer.Stop();

4. 具体的なビジネスシナリオの参照

C# でタイマーを実装して、IP が ping されているか (接続されているか) どうか、および Telnet 経由でポート番号が到達可能かどうか (使用可能かどうか) を定期的に判断します。

C# でタイマーを実装して、IP が ping される (接続されている) かどうか、および telnet 経由でポート番号に到達できる (利用可能である) かどうかを定期的に判断する_横暴な不正気質のブログ - CSDN ブログ

おすすめ

転載: blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/133271648