Silverlight VB AddHandler для динамического объекта - PullRequest
0 голосов
/ 16 декабря 2011

Мы переносим приложение из C # в VB для удовлетворения потребностей нашего проекта, но наткнулись на проблему с обработкой событий в VB.

Приложение использует COM Wrapper для доступа к сканеру в Silverlight.Объект создается динамически в коде, а событие добавляется в «AcquirePage».Конечно, это требует повышенного доверия.

Код на C #:

dynamic TwainSession;
(...)
TwainSession.AcquirePage += new AcquirePageDelegate(AcquirePageEventHandler);

Поскольку единственным реальным "эквивалентом" dynamic в VB является Object , мы используем:

Private TwainSession As Object

Все в порядке до того момента, когда мы хотим обработать событие этого объекта.Поскольку мы находимся в Silverlight, мы не можем знать структуру или события Объекта, поэтому необходимо создавать его динамически.В C # мы просто используем «+ =» для добавления обработчика к событию, но:

AddHandler TwainSession.AcquirePage, AddressOf AcquirePageEventHandler

В VB дает: «AcquirePage» не является событием «объекта»

Есть ли способ обойти это?

Ответы [ 2 ]

0 голосов
/ 19 декабря 2011

Не удалось найти решение для этого в VB, мы пошли по этому пути:

  1. Добавлен новый проект: библиотека классов Silverlight C #
  2. Конструктор принимает два аргумента, динамический объект и адрес обработчика события, и выполняет метод добавления обработчиков в C #:

    публичный TwainHandler (динамический twainSession, делегат eventHandler) { twainSession.AcquirePage + = eventHandler; }

  3. Библиотека C # была собрана, а dll добавлена ​​как ссылка на проект VB.

    Уменьшить как TwainHandler = Новый TwainHandler (TwainSession, New AcquirePageDelegate (AddressOf AcquirePageEventHandler))

Таким образом, библиотека C # добавляет динамический обработчик для события (которое указывает на метод в нашем приложении VB). Если у кого-то есть лучшее решение, пожалуйста, поделитесь.

0 голосов
/ 16 декабря 2011

I думаю ответ - компилировать с Option Strict Off , но без возможности воспроизвести проблему, я не могу быть уверен.

См: Раннее и позднее связывание

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...