Прикрепить событие к динамическому объекту - PullRequest
6 голосов
/ 01 января 2012

Я создаю c # динамический объект COM-объекта следующим образом:

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

Класс clsPDFCreator определяет событие, вызывающее eReady. Но когда я пытаюсь зарегистрировать Eventhandler как

pdfCreator.eReady += _PDFCreator_eReady;

Я получаю сообщение об ошибке «Оператор + не может быть применен к операндам типа« динамический »и« группа методов »».

Как я могу зарегистрировать EventHandler для события, которое объявлено для динамического объекта?

Ответы [ 3 ]

7 голосов
/ 14 сентября 2013

Поскольку тип делегата неизвестен во время компиляции, вы должны указать его.Делегат Action соответствует методам без параметров или возвращаемого значения:

pdfCreator.eReady += new Action(_PDFCreator_eReady);
5 голосов
/ 01 января 2012

Как насчет этого:

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()
{

}
0 голосов
/ 17 февраля 2018

В итоге я использовал следующее, так как другие опции не работали. Возможно, вам придется использовать универсальный для , если ваш EventHandler является универсальным

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