Прежде всего, спасибо @lasseespeholt, за то, что я начал эту идею, очень новую для меня. Но на самом деле Rx очень интересно сделать, делает жизнь намного проще:)
Мне пришлось реализовать аналогичную вещь с древовидным представлением, содержащим узлы (только родительского уровня), отфильтрованные по событию изменения текста в WinForms.
Приложение продолжало падать на меня по какой-то странной причине.
Я нашел файл PDF на сайте MSDN @ MSDN Rx ( Ссылка для скачивания PDF - см. Стр. 25), в котором решалась аналогичная проблема и описана проблема перекрестного доступа.
Вот исправление, которое мне помогло, решение также состоит в том, чтобы использовать ObserveOn перед подпиской.
Вот пример кода, который использует более позднюю версию Rx - 1.0.10605.1
/// <summary>
/// Attach an event handler for the text changed event
/// </summary>
private void attachTextChangedEventHandler()
{
var input = (from evt in Observable.FromEventPattern<EventArgs>(textBox1,"TextChanged")
.select ((TextBox)evt.Sender).Text)
.DistinctUntilChanged()
.Throttle(TimeSpan.FromSeconds(1));
input.ObserveOn(treeView1).Subscribe(filterHandler, errorMsg);
}
private void filterHandler(string filterText)
{
Loadtreeview(filterText);
}