Templated コントロールのスレッド同期に問題があります (AutoComplete コントロールを実行しようとしています)。
私のコントロール内には、次のコードがあります。
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) をコメント アウトすると、問題なく動作しますが、サービス コールが希望どおりに調整されません。
スロットルの部分だけコメントアウトしても何も起こりません。