Dans mon application .NET construite avec WPF et C#, j'appelle une fonction asynchrone en utilisant AsyncMethodCaller. Dans le rappel, je voudrais mettre à jour certaines données dans l'interface graphique, mais je ne suis pas autorisé à le faire car cela est la propriété du thread principal. Comment je le fais?Fonction asynchrone - rappel utilisant un objet appartenant au thread principal
- Vous appelez une mise à jour sur le thread principal? Comment?
- Passez un objet (par exemple ViewModel) en tant qu'état au rappel et mettez à jour les données à ce sujet - qui est lié à nouveau à l'interface graphique?
- D'une autre façon?
Quel est le moyen commun, recommandé de gérer cela?
L'erreur d'exécution est donné:
Le thread appelant ne peut pas accéder à cet objet parce qu'un autre thread est propriétaire.
Merci! Le principe que vous montrez ici m'aide, même si le code ne semble pas fonctionner «hors de la boîte». Et feriez-vous vraiment l'invocation du viewmodel? Cela voudrait dire que vous devez passer l'objet viewModel comme état de toute façon que vous ne pouvez pas accéder à ce soit si appartenant au thread principal? Donc je suppose que vous feriez l'appel directement à partir du rappel? – stiank81
Voici ce que je fais du rappel. Notez que je ne peux pas utiliser Dispatcher.CurrentDispatcher.Invoke car j'ai besoin de celui appartenant au thread principal - je suppose ..? Application.Current.Dispatcher.Invoke (DispatcherPriority.Normal, (ThreadStart) (() => UpdateSomething (returnValue))); – stiank81
Je suppose que vous pouvez faire cela, mais pourquoi insistez-vous pour passer l'objet vm? Vous pouvez certainement exécuter mon code dans l'objet vm et puisque vm est lié à un objet de vue en tant que DataContext, il est certainement exécuté dans le thread principal. –