2011-03-14 3 views
5

Comment puis-je attendre qu'une méthode finisse d'utiliser C#?Attendre la fin de la méthode

+5

Pouvez-vous expliquer un peu mieux ce que vous essayez d'atteindre s'il vous plaît? – FarligOpptreden

+5

Si votre application n'est pas multi-thread et que la méthode que vous avez appelée n'est pas asynchrone, votre prochain morceau de code sera appelé après le retour de la méthode. Nous avons besoin de plus d'informations pour travailler ici, utilisez-vous des threads ou des méthodes 'Begin ..()'? – Kevin

+0

Doit-on supposer que vous parlez d'un appel de méthode asynchrone? –

Répondre

43

Sauf si vous utilisez plusieurs threads, l'exécution ne continuera pas dans le appelant le code jusqu'à ce que la méthode soit terminée quand même.

Si vous êtes en utilisant plusieurs threads, cela dépend vraiment de la façon dont vous lancez la tâche. Par exemple, vous pouvez utiliser l'exécution de délégué asynchrone (foo.BeginInvoke(...)) ou la bibliothèque parallèle de tâches ou simplement créer un nouveau thread. Chaque approche a sa propre manière d'attendre jusqu'à ce que la tâche/le thread soit terminé. S'il vous plaît nous donner plus d'informations et nous pouvons vous aider plus, mais les options peuvent inclure:

  • Appel EndInvoke sur le délégué, en passant dans le IAsyncResult retourné par BeginInvoke
  • Appel Task.Wait (éventuellement avec un délai d'attente)
  • appel Thread.Join (éventuellement avec un délai d'attente)
+30

+1 pour une réponse sensée, Jon Skeet ne débite pas de merde. – mdm

+0

+1 Bien sûr .. @mdm c'est pourquoi nous avons [Jon Skeet] (http://blog.stackoverflow.com/2008/11/stack-overflow-is-you) ici –

+0

+1 pour fournir réellement des options dans le cas de code multithread. –

10
  1. Appelez la méthode.
  2. Attendez que cela se termine.

Remarque: Fonctionne uniquement pour bloquer les appels.

+35

Grand algorithme .../moi applaudit PS: vous avez oublié '3. PROFIT !!! ' – zerkms

6

Je suppose que vous demandez comment attendre un code d'exécuter sur un autre Thr ead dans votre fil principal. À cette fin, la méthode Thread.Join() fera ce que vous voulez.

(Un tutoriel sur la façon de bien faire Multithreading.)

+1

Je sais que vous avez posté ce mois-ci, mais ce lien vers le tutoriel vient de sauver ma vie. Je ne peux pas vous remercier assez pour partager ce lien. – JClaspill

+0

@JClaspill Je suis heureux que cela vous a aidé :) –

Questions connexes