J'ai quelques problèmes avec la synchronisation des threads dans mon contrôle basé sur des modèles (en essayant de faire un contrôle de saisie semi-automatique)gaz RX sur WinRT TemplatedControl
A l'intérieur de mon contrôle, j'ai ce code:
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);
}
}));
}
}
Et il se plaint que dans ma méthode ShowProgressBar j'essaie d'accéder au code qui a été rassemblé par un autre thread. Si je commente le Throttle et l'ObserveOn (Dispatcher) cela fonctionne très bien, mais il ne limite pas mes appels de service comme je le veux.
Si je ne fais que commenter la partie Throttle, Rien ne se passe du tout.
J'utilise le RX 2.0 beta – David
Ceci n'est pas une réponse, mais un petit commentaire - Je ne pense pas que vous ayez besoin du 'async' /' await' dans votre code. Rx fait effectivement l'attente pour vous. Essayez-le sans et laissez-moi savoir si cela fonctionne toujours bien. – Enigmativity
True Enigmativity - le code fonctionne sans async/await. – David