Créer un Événement Personnalisé
Peut un événement personnalisé être créés pour n'importe quel méthode de l'objet?
Pour ce faire, dois-je simplement utiliser la syntaxe suivante?:
myObject.myMethod +=new EventHandler(myNameEvent);
Le code suivant a invité à cette question:
private void btRunProcessAndRefresh_Click(object sender,EventArgs e)
{
myProcess =new Process();
myProcess.StartInfo.FileName = @"c:\ConsoleApplication4.exe";
myProcess.Exited += new EventHandler(MyProcessExited);
myProcess.EnableRaisingEvents =true;
myProcess.SynchronizingObject =this;
btRunProcessAndRefresh.Enabled =false;
myProcess.Start();
}
- découvrez MSDN exemple des événements bien
- notez que
myProcess.Exited += MyProcessExited;
est assez. - ahhhh ....donc je pourrait avoir soit
myProcess.Exited +=new EventHandler(MyProcessExited);
OU je pourrais déclarer l'événement et ensuite utilisermyProcess.Exited += MyProcessExited;
? - oui, le
new EventHandler()
est redondante. - n'oubliez pas de marquer réponse asa accepté si cela fonctionne pour vous ...
- joli, j'avais oublié!
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez faire comme ceci :
La création de avancée C# des événements personnalisés
ou
Le Plus Simple C# D'Événements Exemple Imaginable
Déclarer la classe contenant l'événement:
L'utiliser comme ceci:
Oui, vous pouvez créer des événements sur des objets, ici est un exemple;
EventHandler
ouEventHandler<>
. Voir ici pour plus de détails.Oui, à condition d'avoir accès à la définition de l'objet et peut le modifier pour déclarer l'événement personnalisé
Et, normalement, vous seriez de retour à une méthode privée utilisé en interne pour invoquer l'événement:
Votre code déclare simplement qu'un gestionnaire pour l'déclaré
myMethod
événement (vous pouvez également supprimer le constructeur), qui serait appelée chaque fois que l'objet qui déclenche l'événement.De même, vous pouvez détacher un gestionnaire à l'aide de
Aussi, vous pouvez écrire votre propre sous-classe des
EventArgs
de fournir des données lors de votre événement se déclenche.Basé sur @ionden de réponse, l'appel à la délégué pourrait être simplifiée en utilisant null propagation depuis C# 6.0.
Votre code serait tout simplement:
L'utiliser comme ceci:
Vous devez déclarer votre événement dans la classe de monobjet :
puis myNameEvent est le callback pour gérer l'événement, et il peut être dans n'importe quelle autre classe