我使用Reactive Extensions制作了一个示例应用程序。
我正在尝试根据文本框的内容不断更新建议单词的列表。然而,我的观察员从未收到任何结果。
我的代码出了什么问题?
var ts = Observable.FromEventPattern<EventArgs>(textBox1, "TextChanged");
string dicWord = string.Empty;
var input = (from es in ts
select ((TextBox)es.Sender).Text)
.DistinctUntilChanged()
.Throttle(TimeSpan.FromSeconds(1));
input.ObserveOn(SynchronizationContext.Current)
.Subscribe(x =>
{
label1.Text = x.ToString();
dicWord = x.ToString();
});
var pex = new ServiceReference1.DictServiceSoapClient("DictServiceSoap");
var match = Observable.FromAsyncPattern<string, string, string, DictionaryWord[]>
( pex.BeginMatchInDict, pex.EndMatchInDict );
var lookup = new Func<string, IObservable<DictionaryWord[]>>(
word => match("wn", label1.Text, "prefix"));
var res = from term in input
from words in lookup(term)
select words;
using (res.ObserveOn(SynchronizationContext.Current).Subscribe(words =>
{
listBox1.Items.Clear();
listBox1.Items.AddRange((from word in words select word.Word).ToArray());
}))
您的使用块将立即处理您的订阅。Rx运行良好;-)
我建议您尝试在官方Rx实践实验室中遵循相同的教程http://download.microsoft.com/download/C/5/D/C5D669F9-01DF-4FAF-BBA9-29C096C462DB/Rx%20HOL%20.NET.pdf.
它是在Rx 1.0的时间框架内编写的,但你应该能够让它在Rx 2.1中相对无痛地工作,希望它能为你填补空白。