我的模板控件中的线程同步存在一些问题(尝试执行自动完成控件)
在我的控制范围内,我有以下代码:
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(Dispatcher) 它工作得很好,但它不会像我想要的那样限制我的服务调用。
如果我只注释掉 Throttle 部分,什么都不会发生。