何らかの奇妙な理由で、Elapsed イベントが 2 回発生しています。その直後、タイマーが機能しなくなります... コード構造は次のようなものです: 特定のオブジェクトは、500 ~ 1500 ミリ秒間隔で常に更新される値が X を超えて増加したときに、特定のイベントを発生させるように定義されています。前の値と比較した合計。
たとえば、X を 2 と定義し、受け取る値が 1,2,1,2,3,4,8 の場合、8 が入力されるとイベントが発生します。そのイベントのイベント ハンドラーは前述のタイマーを開始します。このタイマーは Y 時間実行されてから、問題のあるイベントを発生させます。タイマーが経過する前に値が正常に戻った場合、タイマーはリセットされます。
したがって、全体的な結果は、特定の動的な値を測定し、Y 秒以上発生する大きな X サイズの例外を監視するアプリケーションになるはずです。
コードの全体的な結果は次のようになります
vMonitor.Range=X;
vMonitor.Over+= new EventHandler(StartTimer);
vMonitor.Normal+= new EventHandler(StopTimer);
vTimer.Elapsed+= new EventHandler(RaiseAlert);
source.BeginUpdate(vMonitor.Value);
実際の問題は、タイマーが経過すると RaiseAlert が 2 回発生し、タイマーが完全に機能しなくなったかのように発生し、まったく起動しないことです。完全なアプリケーションには多くのスレッド アクティビティが含まれており、一度に少なくとも 2 つのスレッドが実行され、vMonitor の値が更新されていることに言及する価値があると思います。
何かご意見は?
アップデート:
スレッドの問題については、正確な構造を説明するのはかなり複雑ですが、vMonitor オブジェクトは、監視された方法で、さまざまなスレッドによって絶えず変更される更新値を含む別のオブジェクトに含まれていると言えます。 . 親オブジェクトの値が更新されるたびに、vMonitor と比較され、適切なイベントが発生します。その後、vMonitor の値は親オブジェクトの値に置き換えられます。
編集: もう一度確認しました。vTimer.Elapsed デリゲートは、正しいイベント ハンドラーを 1 つだけ保持します。