You can use Observable.When like so (I've added an additional CheckBox for this example):
var checkChanged = Observable.FromEvent<EventArgs>(this.checkBox, "CheckedChanged");
var check1Changed = Observable.FromEvent<EventArgs>(this.checkBox1, "CheckedChanged");
var keyPress = Observable.FromEvent<KeyPressEventArgs>(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);
Also, if you can join other plans together, for example if things can be "done" when either one set of events fire, or also when another set of events fire:
var checkChanged = Observable.FromEvent<EventArgs>(this.checkBox, "CheckedChanged");
var check1Changed = Observable.FromEvent<EventArgs>(this.checkBox1, "CheckedChanged");
var keyPress = Observable.FromEvent<KeyPressEventArgs>(this.textBox, "KeyPress");
var keyPress1 = Observable.FromEvent<KeyPressEventArgs>(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);
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…