8 votes

Attacher un événement à un objet dynamique

Je crée un objet dynamique c# d'un COM-Object de la manière suivante :

dynamic pdfCreator = Activator.CreateInstance(
                       Type.GetTypeFromProgID("PDFCreator.clsPDFCreator"));

La classe clsPDFCreator définit un événement appelé eReady. Mais lorsque j'essaie d'enregistrer un Eventhandler comme

pdfCreator.eReady += _PDFCreator_eReady;

J'obtiens le message d'erreur "Operator '+=' cannot be applied to operands of type 'dynamic' and 'method group'".

Comment puis-je enregistrer un EventHandler pour un événement déclaré dans un objet dynamique ?

8voto

Edward Brey Points 8771

Le type de délégué n'étant pas connu à la compilation, vous devez le spécifier. Le type Action correspond à des méthodes sans paramètres ni valeur de retour :

pdfCreator.eReady += new Action(_PDFCreator_eReady);

5voto

M.Babcock Points 10653

Que pensez-vous de ceci ?

public delegate void eReadyHandler();

static void Main(string[] args)
{
    var comType = Type.GetTypeFromProgID("PDFCreator.clsPDFCreator");
    dynamic pdfCreator = Activator.CreateInstance(comType);
    //dynamic pdfCreator = new PDFCreator.clsPDFCreator();

    //pdfCreator.eReady = null;
    pdfCreator.eReady += new eReadyHandler(_PDFCreator_eReady);
}

public static void _PDFCreator_eReady()
{

}

0voto

Mandeep Janjua Points 896

J'ai fini par utiliser le suivant car les autres options n'ont pas fonctionné. Vous devrez peut-être utiliser le générique de < T > si votre EventHandler est un générique

pdfCreator.eReady += new System.EventHandler(_PDFCreator_eReady);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X