プロダクションアプリケーションでは、WPFボタンが高速ダブルクリックでICommand.Executeメソッドを2回起動することがわかりました。WPFのコマンドが高速ダブルクリックで2回発生
ここで、すべてのコマンドで、アプリケーションはフルスクリーンのスピナーアニメーションで覆われているため、アプリケーションとのやり取りはこれ以上できません。
This github repoには、問題の最小限の再現が含まれています。なお:ボタンのコマンド火災は、「IsBusy」フラグが結果として
- 、BusyIndicatorオーバーレイは、結果として
- が表示されます、ボタンをもう一度押すことができません300msの
後までしかし、特に高速のダブルクリック(つまり、高速にゲームのような、本当に速い)遅いコンピュータ上で、缶(BusyIndicatorが2回目の呼び出しをブロックせずにコマンドを2回発射することが可能ですoの直後に2行の 'click'行が表示されている場合に表示されます別のもの)。
これは予期せぬ動作です.IsBusyフラグはUIスレッド上で真に設定されています。 2回目のクリックはどのように通過できますか? 私は、IsBusy BindingがUIスレッド上にオーバーレイを表示し、それ以上の対話をブロックすることを期待していますか?
githubのサンプルはまた、2つの回避策含まれています。私は理解しようとしているダブルクリック
を防ぐためにPreviewMouseDownを使用して実行し、ハンドラ
- を何が問題なの? どのような回避策をお勧めしますか?