我正在使用 observables 来处理 keydown 事件。我想发布一个可观察的,如果消费者实际处理了它,它将始终设置要处理的密钥。这可能吗?
这是我现在如何设置键的示例:
KeyDown.Where(e => e.Key == Keys.W)
.Subscribe(e => { Console.WriteLine(e.Key); e.Handled = true; });
这是一个我想如何做的例子(如果之后自动设置了处理的属性,我也可以发布 Keys 而不是 KeyDownEventArgs):
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();
});
这段代码的问题是,无论消费者是否实际处理了它,密钥都将始终设置为已处理。
有没有办法知道代码是否“到达”了订阅方法?