私はUserControlのイベントに登録していますが、このイベントはスクロールバーを移動するたびにスローされます(つまり、多くのイベントを受け取ります)。残念ながら、ユーザーがスクロールバー(== MouseUp)の使用を終了したときに通知するイベントはありません。コードの実行を遅らせます
私たちは300ミリ秒以来スクロールバーから新しい通知を受け取らなかった場合にのみモデルを更新する仕組みを実装することに決めました。
私は、Timerでこれを行い、ScrollBarイベントが来るたびにタイマーをリセットする方法を見ることができます。
私はLinqとDelayでそれを行う方法があるのだろうかと思っていましたか?
private Action _actionOnMoved;
private void OnScrollBarMoved(object sender, EventArgs args){
}
EDIT
私は潜在的に重複して答えを読んだが、スロットリングは私が求めているものをと同じものではありません。私の場合、指定された時間よりもイベントが来るまでは、この変更を適用するには3〜5秒かかりますので、何もしたくない(最初のものでもない)。与えられたリンクで
- を、最初の呼び出しは関係なく、私の場合は何
- 実行されない呼び出しが遅延以内に行われた場合、コールはまだ後に実行する必要があります。異なる点についてだから、
たとえば、このイベントが100ミリ秒ごとにトリガーされ、遅延が300ミリ秒である場合、私は自分のメソッドを呼び出さないことを期待しています。
お使いのプラットフォームは何ですか? winforms、wpfまたはASP – Kira
Winformですが、サードパーティのライブラリからイベントを受け取ったとします。より具体的なイベントに登録する方法よりも、問題の遅れにもっと関心があります。 – J4N
これは同様の方法で解決できますが、ここで質問されているものとは異なるスロットル問題を扱うので、私はとにかく質問を再開します。 – Larry