Я использую RxFramework в приложении WinForms.Я пытаюсь запустить Observable async и использую CancellationDisposable, чтобы отменить операцию, когда пользователь нажимает кнопку.Но это не работает!
Предположим, у меня есть форма с 2 кнопками и ProgressBar.Button1_click подписаться на наблюдателя в новой теме.Button2_click затем нажимается сразу после отмены операции.Почему cancel.Token.IsCancellationRequested никогда не соответствует действительности?
private IDisposable obs = null;
private void button1_Click(object sender, EventArgs e) {
var countObserver = Observable.Create<int>(observer => {
var cancel = new CancellationDisposable();
if (!cancel.Token.IsCancellationRequested) {
//Step 1 of a long running process using lot of resources...
observer.OnNext(1);
}
if (!cancel.Token.IsCancellationRequested) {
//Step 2 of a long running process using lot of resources...
observer.OnNext(1);
}
if (!cancel.Token.IsCancellationRequested) {
//Step 3 of a long running process using lot of resources...
observer.OnNext(1);
}
observer.OnCompleted();
return cancel;
});
obs = countObserver
.ObserveOn(new ControlScheduler(this))
.SubscribeOn(Scheduler.ThreadPool)
.Subscribe(i => {
//Update a progress bar here...
});
}
private void button2_Click(object sender, EventArgs e) {
if (obs != null)
obs.Dispose();
}