Bonjour à tous,
Cela fait quelques mois que je m'efforce de faire des applications multi-thread...Et depuis que j'ai commencé j'ai un problème récurrent et très embêtant.
J'ai une méthode qui ne peut être appelée qu'en asynchrone (une méthode WCF pour un client Silverlight). Or, dans mon cas, j'ai besoin de faire un appel synchrone sur ladite méthode (l'aspect "asynchrone" étant déjà géré par un système interne à l'application Silverlight)
La "bricole" qu'on trouve un peu partout sur le web consiste à utiliser un locker (ManualResetEvent, AutoResetEvent ...) qu'on signale à l'intérieur de la méthode de callback de l'appel asynchrone; un peu comme dans le code ci-dessous :
Seulement, dans ce cas là, non seulement le thread exécutant ce code est bloqué (logique) mais le thread servant à effectuer la méthode asynchrone le devient aussi (là, je capte plus!). Du coup, mon callback n'est jamais appelé et le thread exécutant n'est jamais déverrouillé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 ManualResetEvent locker = new ManualResetEvent(false); AsyncCallback asc = new AsyncCallback((IAsyncResult es) => { _channel.EndConnect(es); locker.Set(); }); IAsyncResult res = _channel.BeginConnect(asc, null); locker.WaitOne();
Si quelqu'un a une explication...Et encore mieux, une solution, ça me sauverait grandement ^^
Partager