2009-12-24 11 views
1

J'ai une application WinFrom, utilisez une méthode synchrone pour télécharger une chaîne à partir d'une URL, et utilisez la méthode Rx ToAsync pour la rendre asynchrone et obtenir le résultat observable, et quand le résultat arrive je l'affiche sur le formulaire.Comment puis-je mettre à jour l'interface utilisateur lorsque Observable.Context n'est pas disponible?

Hier, j'ai mis à jour Rx à la dernière version, et il a été dit que "Observable ne contient pas de définition de contexte". J'ai essayé de commenter cette ligne, les codes ont jeté une exception que "opération Cross-thread pas valide: Contrôle 'tbx_Reference' accédé à partir d'un thread autre que le fil sur lequel il a été créé."

Je souhaite afficher le résultat asynchrone à l'aide de la méthode Subscribe. Comment puis-je résoudre ce problème? Merci beaucoup.

public static IObservable<TResult> DoWorkAsync(TParameter parameter, 
     Func<TParameter,TResult> actionSync) 
    { 
     Observable.Context = SynchronizationContext.Current; 

     Func<TParameter, IObservable<TResult>> ActionAsync = actionSync.ToAsync(); 

     IObservable<TResult> results = from result in ActionAsync(parameter) 
             select result; 

     return results; 
    } 

Répondre

3

Pour votre déclaration de retour, essayez:

return results.ObserveOnDispatcher(); 
+0

Il fonctionne après que je l'utilise results.ObserveOnDispatcher(). Merci beaucoup! –

+0

Très heureux d'aider! –