2009-08-24 11 views
5

J'ai une question sur la gestion des événements avec C#. J'écoute des événements lancés par une classe A. Maintenant, quand l'événement est lancé, une méthode est exécutée qui fait quelque chose. Cette méthode doit parfois attendre des respones à partir de sources de données ou similaires.Gestion des événements filetés (C#)

Je pense que la gestion des événements est synchrone, donc un événement après l'autre sera traité. Est-il possible de rendre cela asynchrone? Je veux dire que lorsque la méthode est exécutée mais doit attendre la réponse de la source de données, un autre événement peut être traité?

Merci à l'avance

Sebastian

Répondre

11

Je suppose que vous pouvez reproduire le code qui a besoin d'attendre dans un nouveau thread. Cela entraînerait le gestionnaire d'événements à ne pas bloquer le thread sur lequel les événements sont levés, afin qu'il puisse appeler le gestionnaire d'événements suivant en ligne. (C# 3.5 échantillon)

private void MyPotentiallyLongRunningEventHandler(object sender, SomeEventArgs e) 
{ 
    ThreadPool.QueueUserWorkItem((state) => { 
     // do something that potentially takes time 

     // do something to update state somewhere with the new data 
    }); 
} 
+0

Que faire si les arguments (SomeEventArgs) contiennent des paramètres de sortie? La méthode ne peut pas partir jusqu'à ce que les paramètres de sortie sont calculés ... J'ai posté une question connexe ici: http://stackoverflow.com/questions/6453655/parallel-event-handling-in-c/6453701#6453701 –

2

simple, créer un thread dans votre gestionnaire d'événements et faire toute la logique là-bas. Il est préférable d'utiliser le pool de threads pour limiter le nombre de threads.

+0

Création d'un Le thread n'est pas bon marché, donc ce ne sera probablement pas une bonne idée pour un gestionnaire d'événement, mais vous pouvez utiliser le pool de threads comme vous le dites. –

+0

Je ne pense pas que le pool de threads ait toujours des threads pré-créés, je pense qu'il les créera quelques fois, donc vous paierez ce coût de toute façon. – vava

Questions connexes