我有我的模板化控件的一些問題與線程同步(試圖做一個自動完成控制)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