2

私はしばらくの間、この問題の解決策を見つけようとしてきました。スイング イベント バッファを記述するためのベスト プラクティスは何ですか? イベントが何度も発生する可能性があるため、「mouseMoved」などのマウスジェスチャからアクションをトリガーする場合、最後の呼び出しのみをトリガーしたいという考えがあります-たとえば、

最初のクリックリスナーが実行されている間にマウスが 5 回クリックされ、4 つがキューに入れられた場合、次の呼び出しは 5 つ目になり、それ以前の呼び出しはすべてスキップされます。

未提出のタスクを削除できるExecutorクラスを使用する必要があるようですが、まだよくわかりません。すべての助けに感謝します!

4

1 に答える 1

2

user1291492 は正しいです。これはまったく起こらないはずです。イベント ハンドラーで完了するのに数ミリ秒以上かかる可能性のあるコードは実行しないでくださいSwingWorkerのドキュメントには、その方法に関する例と説明が含まれています。最も重要な引用は

時間のかかるタスクは、イベント ディスパッチ スレッドで実行しないでください。そうしないと、アプリケーションが応答しなくなります。

元の質問に対処するために、私が通常使用する 2 つのパターンがあります。

  1. フラグを使用して、将来のある時点で実行する必要があるアクションをマークします。しばらく他に仕事がないときは、すべてのフラグをチェックしてリセットし、適切なアクションを実行します。

  2. ワーカー スレッドの作業をスケジュールするときは、それへの参照を保持します。新しい作業をスケジュールする前に、以前にスケジュールされた作業をキャンセルします。ほとんどの場合、C#/Async の CancellationTokens で使用されます。

于 2012-05-02T15:49:58.543 に答える