キーダウンイベントを処理するためにオブザーバブルを使用しています。オブザーバブルを公開したいと思います。これにより、消費者が実際に処理した場合に処理されるキーが常に設定されます。これは可能ですか?
これが、現在処理されるキーを設定する方法の例です。
KeyDown.Where(e => e.Key == Keys.W)
.Subscribe(e => { Console.WriteLine(e.Key); e.Handled = true; });
これが私がそれをどのようにしたいかの例です(処理されたプロパティが後で自動的に設定された場合、KeyDownEventArgsの代わりにKeysを公開することもできます):
HandledKeyDown.Where(k => k == Keys.W).Subscribe(k => Console.WriteLine(k));
これが私が試したことです:
HandledKeyDown = Observable.Create<Key>(observer => {
var keys = KeyDown.Subscribe(e => { e.Handled = true; observer.OnNext(e.Key); });
return () => keys.Dispose();
});
このコードの問題は、コンシューマーが実際にキーを処理したかどうかに関係なく、キーが常に処理済みとして設定されることです。
コードがサブスクライブメソッドに「到達」したかどうかを知る方法はありますか?