Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1124 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [C#] Appeller plusieurs méthodes asynchrones ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C#] Appeller plusieurs méthodes asynchrones ?

n°1723456
pot2yaourt
Posté le 24-04-2008 à 11:17:31  profilanswer
 

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 :

Code :
  1. //instanciation du service web
  2. private webService.MyWebService WS = new webService.MyWebService();
  3. public frmMain()
  4. {
  5.     InitializeComponent();
  6.     // Ajoute les gestionnaires d'événements pour les méthodes asynchrones utilisées
  7.     WS.getListACompleted += new webService.getListACompletedEventHandler(getListACompleted);
  8.     //idem pour getListBCompleted et getListCCompleted  
  9. }
  10. private void frmMain_Load(object sender, EventArgs e)
  11. {
  12.     WS.getListAAsync();
  13.     WS.getListBAsync();
  14.     WS.getListCAsync();
  15. }
  16. private void getListACompleted(object sender, webService.getListACompletedEventArgs completed)
  17. {
  18.     //remplis la liste déroulante
  19. }


Par la suite, j'aurais aussi besoin d'appeller simultanément plusieurs méthodes du service web lors du click sur un bouton :

Code :
  1. private void btnWork_Click(object sender, EventArgs e)
  2. {
  3.     WS.doIt();
  4.     WS.doThat();
  5.     WS.work();
  6. }


 
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.

Code :
  1. static class Program
  2. {
  3.     [STAThread]
  4.     static void Main()
  5.     {
  6.         Application.EnableVisualStyles();
  7.         Application.SetCompatibleTextRenderingDefault(false);
  8.         Application.Run(new frmMain());
  9.     }
  10. }


 
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 :

Code :
  1. private void frmMain_Load(object sender, EventArgs e)
  2. {
  3.     WS.getListAAsync();
  4.     Thread.Sleed(1000); // je sais, c'est pas bô !
  5.     WS.getListBAsync();
  6.     Thread.Sleed(1000);
  7.     WS.getListCAsync();
  8. }


Il y a aussi un autre truc dans le même genre :

Code :
  1. private webService.MyWebService WS1 = new webService.MyWebService();
  2. private webService.MyWebService WS2 = new webService.MyWebService();
  3. private webService.MyWebService WS3 = new webService.MyWebService();
  4. private void frmMain_Load(object sender, EventArgs e)
  5. {
  6.     WS1.getListAAsync();
  7.     WS2.getListBAsync();
  8.     WS3.getListCAsync();
  9. }


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.

mood
Publicité
Posté le 24-04-2008 à 11:17:31  profilanswer
 

n°1723587
pot2yaourt
Posté le 24-04-2008 à 13:52:21  profilanswer
 

Je viens de tester les délégués mais ça ne fonctionne toujours pas  :  
 

Code :
  1. private webService.MyWebService WS = new webService.MyWebService();
  2. private delegate void délégué();
  3. private void frmMain_Load(object sender, EventArgs e)
  4. {
  5.     délégué d = new délégué(WS.getListAAsync);
  6.     d += new délégué(WS.getListBAsync);
  7.     d();
  8. }


Help !!  :cry:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  [C#] Appeller plusieurs méthodes asynchrones ?

 

Sujets relatifs
PB socket C et fcntl()[REGLE]Création panorama 360° flash avec plusieurs photos
[C#] Lecture d'un port USBUn programme dans plusieurs jar
Probleme settimeout pour afficher plusieurs texte à la suiteplusieurs INSERT voire meme des milliers
Plusieurs milliers d'enregistrements sur la bddUne grosse BDD ou plusieurs ?
Plusieurs thèmes sur un siteplusieurs couleurs d'écriture dans un meme combobox
Plus de sujets relatifs à : [C#] Appeller plusieurs méthodes asynchrones ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR