另一种方法是使用 Rx (Reactive Extensions) 框架来封装具有一些非常有趣的特性的 automplete。
使用 Rx,您可以编写(多个事件源),限制用户输入,以免淹没源,此外,如果用户在搜索框中键入更多内容(TakeUntil),您可以忽略旧结果。
更多信息:
Rx:治愈你的异步编程忧郁症
使用 Reactive Extensions for .NET 治愈异步忧郁症
例子:
SO:RX 自动完成框
RxProperty = Observable.FromEvent<TextChangedEventHandler, TextChangedEventArgs>(
h => new TextChangedEventHandler(h),
h => AssociatedObject.TextChanged += h,
h => AssociatedObject.TextChanged -= h)
.Select(t => ((TextBox)t.Sender).Text)
.Throttle(TimeSpan.FromMilliseconds(400))
.SubscribeOnDispatcher()
.Take(10)
.TakeUntil(AssociatedObject.TextChanged );
代替 FromEvent,您可以使用 FromAsync 并使用代理 Beginxxx Endxxx 方法。