我有我的模板化控件的一些问题与线程同步(试图做一个自动完成控制)RX油门
在我的控制我有这样的代码:
protected override void OnApplyTemplate()
{
base.OnApplyTemplate();
var searchTextBox = GetTemplateChild("SearchTextBox") as TextBox;
if (searchTextBox != null)
{
var searchDelegate = SearchAsync;
Observable.FromEventPattern(searchTextBox, "TextChanged")
.Select(keyup => searchTextBox.Text)
.Where(TextIsLongEnough)
.Throttle(TimeSpan.FromMilliseconds(500))
.Do(ShowProgressBar)
.SelectMany(searchDelegate)
.ObserveOn(Dispatcher)
.Subscribe(async results => await RunOnDispatcher(() =>
{
IsInProgress = false;
SearchResults.Clear();
foreach (var result in results)
{
SearchResults.Add(result);
}
}));
}
}
而且它抱怨在我的ShowProgressBar方法中,我试图访问由另一个线程编组的代码。
如果我将Throttle和ObserveOn(调度程序)注释掉,它工作得很好,但它并没有像我想的那样限制我的服务调用。
如果我只注释出Throttle部分,则根本没有任何反应。
我使用的是RX 2.0 beta – David
这不是一个答案,而是一个快速评论 - 我不认为你需要在代码中使用'async' /'await'。 Rx有效地等待着你。尝试一下,并让我知道如果它仍然正常工作。 – Enigmativity
真正的Enigmativity - 代码无需异步/等待。 – David