Je souhaiterai savoir quel procédé (délégué, threads, autres ?) utiliser pour pouvoir exécuter plusieurs appels à des méthodes asynchrones ?
Tout d'abord, j'ai un service web avec plusieurs méthodes : - getListA(), getListB(), getListC() : retournent différentes structures me permettant de remplir des listes déroulantes - doIt(), doThat(), work() : des méthodes diverses indépendantes
Au chargement du client (winform) j'instancie donc mon service web puis j'aimerai charger toutes mes listes déroulantes :
Code :
//instanciation du service web
private webService.MyWebService WS = new webService.MyWebService();
public frmMain()
{
InitializeComponent();
// Ajoute les gestionnaires d'événements pour les méthodes asynchrones utilisées
WS.getListACompleted += new webService.getListACompletedEventHandler(getListACompleted);
//idem pour getListBCompleted et getListCCompleted
Voici le message d'erreur que j'obtiens lors du lancement de l'application : Erreur lors du traitement asynchrone. Un état d'objet unique est requis pour que plusieurs opérations aychrones simultanées soient en attente.
Jusqu'à présent je suis arrivé à "contrer" quelque peu le problème mais c'est vraiment pas joli... carrément crado même ! Quelques exemples de trucs à ne pas faire :
Et y'a aussi la solution d'exécuter uniquement getListAAsync(); lors du chargement du formulaire et d'exécuter getListBAsync(); dans le corps de getListACompleted après avoir rempli la première liste déroulante. C'est du chargement de listes déroulantes en cascade si l'on peut dire...
Bon, maintenant que je vous ai fais voir que j'étais capable du pire... est-ce que quelqu'un pourrait m'expliquer la bonne méthode à mettre en place ? J'ai vu qu'il est possible de passer un paramètre userState de type Object lors de l'appel des méthodes asynchrone. Mais franchement j'ai rien compris à la doc MSDN... ça paraît être bien compliqué tout ça !
Merci de me donner votre avis et si vous avez une piste et/ou un bout de code en guise d'exemple ça serait super ! Lionel.
Marsh Posté le 24-04-2008 à 11:17:31
Salut à tous !
Je souhaiterai savoir quel procédé (délégué, threads, autres ?) utiliser pour pouvoir exécuter plusieurs appels à des méthodes asynchrones ?
Tout d'abord, j'ai un service web avec plusieurs méthodes :
- getListA(), getListB(), getListC() : retournent différentes structures me permettant de remplir des listes déroulantes
- doIt(), doThat(), work() : des méthodes diverses indépendantes
Au chargement du client (winform) j'instancie donc mon service web puis j'aimerai charger toutes mes listes déroulantes :
Par la suite, j'aurais aussi besoin d'appeller simultanément plusieurs méthodes du service web lors du click sur un bouton :
Voici le message d'erreur que j'obtiens lors du lancement de l'application :
Erreur lors du traitement asynchrone. Un état d'objet unique est requis pour que plusieurs opérations aychrones simultanées soient en attente.
Jusqu'à présent je suis arrivé à "contrer" quelque peu le problème mais c'est vraiment pas joli... carrément crado même !
Quelques exemples de trucs à ne pas faire :
Il y a aussi un autre truc dans le même genre :
Et y'a aussi la solution d'exécuter uniquement getListAAsync(); lors du chargement du formulaire et d'exécuter getListBAsync(); dans le corps de getListACompleted après avoir rempli la première liste déroulante. C'est du chargement de listes déroulantes en cascade si l'on peut dire...
Bon, maintenant que je vous ai fais voir que j'étais capable du pire... est-ce que quelqu'un pourrait m'expliquer la bonne méthode à mettre en place ?
J'ai vu qu'il est possible de passer un paramètre userState de type Object lors de l'appel des méthodes asynchrone. Mais franchement j'ai rien compris à la doc MSDN... ça paraît être bien compliqué tout ça !
Merci de me donner votre avis et si vous avez une piste et/ou un bout de code en guise d'exemple ça serait super !
Lionel.