.NET的react native扩展(Rx):完成所有事件后立即执行操作
作为概念certificate,我想在选中复选框并在文本框中按下某个键(按任意顺序) 后 ,在文本框中写“完成”。 我希望这段代码可以处理这个问题,但是只要事件发生,它就会写完Done。 谢谢你的帮助。
var seq = Observable.FromEvent(this.checkBox, "CheckedChanged") .Merge(Observable.FromEvent(this.textBox, "KeyPress")); seq.Subscribe((unused) => this.resultTextBox.Text = "Done");
你可以使用Observable.When就像这样(我为这个例子添加了一个额外的CheckBox):
var checkChanged = Observable.FromEvent(this.checkBox, "CheckedChanged"); var check1Changed = Observable.FromEvent (this.checkBox1, "CheckedChanged"); var keyPress = Observable.FromEvent(this.textBox, "KeyPress"); var plan1 = checkChanged .And(check1Changed).And(keyPress) .Then((cc, cc1, kp) => "Done."); var when = Observable.When(plan1); when.Subscribe((result) => this.resultTextBox.Text = result);
此外,如果您可以一起加入其他计划,例如,当一组事件触发时,或者当另一组事件触发时,事情可以“完成”:
var checkChanged = Observable.FromEvent(this.checkBox, "CheckedChanged"); var check1Changed = Observable.FromEvent (this.checkBox1, "CheckedChanged"); var keyPress = Observable.FromEvent(this.textBox, "KeyPress"); var keyPress1 = Observable.FromEvent (this.textBox1, "KeyPress"); var plan1 = checkChanged.And(check1Changed).And(keyPress).Then((cc, cc1, kp) => "Done."); var plan2 = keyPress.And(keyPress1).Then((kp, kp1) => "Alternate done."); var join = Observable.When(plan1, plan2);
如果你需要两个事件发生 – 考虑使用Zip。 如果任何合并的源提升它,合并将触发事件。