2010-06-04 4 views
0

Je reconnais qu'il s'agit peut-être d'un article en double, mais je veux m'assurer de poser clairement cette question et obtenir une réponse en fonction de ma formulation.Les événements dans WinForms sont-ils lancés de manière asynchrone?

J'ai une collection de formes qui héritent d'un élément visuel commun: MainVisualForm. Cet élément me fournit un moyen de savoir quand le formulaire avance en reculant. La forme qui suit dans la séquence dépend de l'action de l'utilisateur.

J'ai actuellement ce code pour un tel événement comme je teste:

form.OnNextForm += (f, ev) => 
      { 
       Parameters.Vehicle = ((VehicleForm)f).SelectedVehicle; 
       //FormStack.Push(Parameters.Vehicle == Vehicle.SUV 
       //    ? new KeyValuePair<Type, IFormActionBehvaior>(typeof(EntertainmentForm), null) 
       //    : new KeyValuePair<Type, IFormActionBehvaior>(typeof(ColorForm), null)); 
      }; 

Cette affectation est suivie immédiatement par ShowDialog() qui bloque l'utilisateur jusqu'à ce que la forme de dialogue est fermée. La question est: La question est: Après la fermeture du formulaire, .NET attend-il que l'EventHandler se termine avant d'exécuter le code qui suit directement ShowDialog() ou le gestionnaire est-il géré par un thread différent?

Merci beaucoup à l'avance

Répondre

5

Winforms fonctionne dans un seul thread - en fait, vous ne pouvez pas accéder même à partir d'un second fil sans courir des ennuis. Sauf si vous créez vous-même un thread (ou un BackgroundWorker ou toute autre chose qui constitue un thread), vous n'aurez qu'un thread.

2

En toute simplicité, les Winforms .NET fonctionnent sous un seul thread.

2

Il attend que l'événement se termine. Les événements ne sont en réalité que des appels de méthodes à des méthodes définies ailleurs (délégués). Une fois toutes ces opérations terminées, le code suivant sera exécuté après ShowDialog().

Questions connexes