2

タイマーの経過イベントが重複していることを検出する方法はありますか?たとえば、経過したイベントの間隔が200ミリ秒のタイマーを作成しましたが、イベントで実行されたコードに200ミリ秒以上かかっています。その結果、最後のイベントが終了する前に、別の経過イベントが実行されます。また、最後のイベントが終了する前に別のイベントが呼び出されないように、これが発生しないようにする方法はありますか?

4

3 に答える 3

1

タイマー イベントを 200 ミリ秒のマークで発生させ、前のイベントがまだ実行されている場合に 1 つをスキップする (延期するのではなく) 場合は、ロック コードを使用できます。

メソッドMonitor.TryEnterを使用すると、ロックを取得したかどうか (つまり、別のスレッドがロックされたコードに既に存在するかどうか) を示すブール値が返されます。これにより、必要に応じてスキップして次の実行時間を待つことができます (または、時間がかかりすぎるなどのデバッグ メッセージを書き出すことができます)。

これが良い解決策であるかどうかは、タイマーが何をしたいかによって異なります。多くの場合、他の人が提案した、前のイベントが終了したら次のイベントのタイマーを開始する方法で十分です。

于 2010-12-21T09:45:30.600 に答える
1

現在のサイクルが終了した後に次のサイクルを起動する場合は、タイマーがティック イベントにヒットしたら停止し、終了したら再起動します。

Timer fires Tick-Event
    Disable/Stop Timer
    Program logic goes here
    Restart Timer
于 2010-12-21T08:16:49.950 に答える
0

Timer.Stopメソッドの使用をご覧ください

于 2010-12-21T08:10:06.840 に答える