2009-11-29 7 views

Répondre

21
  1. est une méthode d'instance qui bloquera jusqu'à ce que le handle d'attente soit signalé (lorsque l'opération est terminée). S'il a déjà été signalé précédemment (c'est-à-dire opération déjà terminée), il est possible que l'appel au WaitOne() ne bloque pas.
  2. WaitHandle.WaitAll() et WaitHandle.WaitAny() sont des méthodes statiques qui vous permettent de spécifier un certain nombre d'attente poignées pour surveiller simultanément:

    • WaitHandle.WaitAll() attendra que tous les des poignées spécifiées ont été signalés avant qu'il ne revienne.
    • WaitHandle.WaitAny() retournera dès que des poignées spécifiées ont été signalées.

    Ces méthodes vous permettent de surveiller un certain nombre d'opérations asynchrones en cours en même temps.

Contexte:AsyncWaitHandle est le nom d'une propriété sur l'interface IAsyncResult. Le type réel de cette propriété est WaitHandle, qui est une classe de base abstraite pour les types tels que Semaphore, Mutex et Manual/AutoResetEvent.

Voir aussi:Blocking Application Execution Using an AsyncWaitHandle (MSDN)

+0

Avant EndInvoke() avons-nous besoin de les appeler? – user215675

+0

Vous avez raison, mais je pense que le PO demandait spécifiquement à propos de AsyncWaitHandle.WaitOne(). Je pense donc qu'il demandait si l'appel à WaitOne bloquerait toujours même si l'opération asynchrone était terminée, ce qui bien sûr ne le ferait pas – zebrabox

+0

N ° EndInvoke() peut être appelé à tout moment après BeginInvoke() et bloquera si l'opération n'a pas encore terminé. –

2

Les méthodes vous permettent d'attendre sur un événement Windows. WaitOne n'est pas statique et attend le handle d'événement pour cet objet. WaitAll et WaitAny sont des méthodes statiques à l'échelle de la classe qui attendent un groupe de gestionnaires d'événements. WaitAll attend que tous les événements soient signalés et WaitAny pour un seul événement du groupe.

+0

Je ne sais pas ce que vous entendez par 'attendre sur les événements de fenêtres. WaitOne est principalement utilisé pour synchroniser les opérations asynchrones, c'est-à-dire la synchronisation d'un thread avec un autre thread. L'OP posait des questions sur AsyncWaitHandle.WaitOne. AsyncWaitHandle est un WaitHandle généralement utilisé pour synchroniser un BeginInvoke, c.-à-d. Qu'il supprime le besoin d'interroger et d'appeler IsCompleted sur le IAsyncResult – zebrabox

+0

Il peut également être utilisé pour les événements Windows (par exemple CreateEvent) voir la propriété SafeWaitHandle et http://msdn.microsoft.com /en-us/library/microsoft.win32.safehandles.safewaithandle.safewaithandle.aspx. – kenny