Reaktive Erweiterungen erlauben mir, einen Strom von Ereignissen zu "beobachten". Wenn der Benutzer beispielsweise seine Suchabfrage im Windows 8-Suchbereich eingibt, wird SuggestionsRequested immer wieder (für jeden Buchstaben) ausgelöst. Wie kann ich Reaktive Erweiterungen nutzen, um die Anfragen zu drosseln?Wie kann ich Reaktive Erweiterungen verwenden, um SearchPane.SuggestionsRequested zu drosseln?
Etwas wie folgt aus:
SearchPane.GetForCurrentView().SuggestionsRequested += (s, e) =>
{
if (e.QueryText.Length < 3)
return;
// TODO: if identical to the last request, return;
// TODO: if asked less than 500ms ago, return;
};
Lösung
System.Reactive.Linq.Observable.FromEventPattern<Windows.ApplicationModel.Search.SearchPaneSuggestionsRequestedEventArgs>
(Windows.ApplicationModel.Search.SearchPane.GetForCurrentView(), "SuggestionsRequested")
.Throttle(TimeSpan.FromMilliseconds(500), System.Reactive.Concurrency.Scheduler.CurrentThread)
.Where(x => x.EventArgs.QueryText.Length > 3)
.DistinctUntilChanged(x => x.EventArgs.QueryText.Trim())
.Subscribe(x => HandleSuggestions(x.EventArgs));
Installieren RX für WinRT: http://nuget.org/packages/Rx-WinRT/ Weitere Informationen: http://blogs.msdn.com/b/rxteam/archive/2012/08/15/reactive-extensions-v2-0-has-arrived.aspx
@ JerryNixon-MSFT Oh, Entschuldigung für das :) Es tauchte auf, als ich stöberte ... Froh, dass ich recht hatte. –