J'ai une question sur les événements dans .NET (C#). J'ai dû écrire du code pour plusieurs situations dans lesquelles une tâche d'arrière-plan est en cours d'exécution et je souhaite notifier un thread principal, ou une classe de contrôleur, que quelque chose s'est produit, comme une tâche terminée ou une copie de fichier terminée. Je ne veux pas que la tâche en arrière-plan attende que le délégué du thread principal traite l'événement. Je veux faire quelque chose comme le passage de message: Envoyer le message, mais qui se soucie de ce qu'ils font avec lui.Comment puis-je déclencher un événement sans attendre l'exécution des écouteurs d'événement?
Par exemple:
Une classe est écrit pour traiter plusieurs processus dans l'ordre, l'un après l'autre. Chaque processus doit être exécuté sur un thread d'arrière-plan. Lorsque le travail est terminé, un événement se déclenche et indique au contrôleur que c'est fait (disons en utilisant la méthode OnCompleted())
Le problème est que si le gestionnaire d'événements du contrôleur est utilisé pour démarrer le processus suivant, les processus précédents 'OnComplete La méthode reste sur la pile des appels (ne finit jamais l'exécution) jusqu'à ce que tous les processus soient terminés.
Dans cette situation, comment la tâche d'arrière-plan peut-elle informer la classe de contrôleur que le travail est effectué sans conserver la méthode de déclenchement d'événement sur la pile?
Exemple 2: Un programme de sauvegarde.
Un fil d'arrière-plan s'exécute pour copier chaque fichier vers la destination. L'arrière-plan doit notifier l'interface utilisateur du dernier fichier qui a été copié, mais il n'a pas besoin d'attendre la mise à jour de l'interface utilisateur. Au lieu de cela, il veut juste dire, "BTW, voici quelques informations. Maintenant, laissez-moi retourner au travail." L'écouteur d'événement ne doit pas bloquer le traitement de l'événement.
Comment pourrais-je faire cela en C#? –
Eh bien, vous semblez savoir comment lancer un autre thread. Il suffit au premier écouteur d'événement de le faire (dès que vous créez l'objet avec l'événement, affectez le gestionnaire –