.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。 如果任何合并的源提升它,合并将触发事件。