Silverlight VB AddHandler到动态对象

时间:2011-12-16 11:08:36

标签: vb.net silverlight object dynamic handler

我们正在将应用程序从C#迁移到VB以满足我们项目的需求,但偶然发现VB中的事件处理问题。

应用程序使用COM Wrapper访问Silverlight中的扫描程序。该对象在代码中动态创建,并且事件被添加到“AcquirePage”。这当然需要提高信任度。

C#中的代码:

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

由于VB中唯一真正的“等效”动态对象,我们使用:

Private TwainSession As Object

我们想要处理此Object的事件,一切都很好。因为我们在Silverlight中,所以我们无法了解Object的结构或事件,因此需要动态创建它。在C#中,我们只需使用“+ =”为事件添加处理程序,但是:

AddHandler TwainSession.AcquirePage, AddressOf AcquirePageEventHandler

在VB中给出: 'AcquirePage'不是'对象'的事件

有什么方法吗?

2 个答案:

答案 0 :(得分:0)

认为答案是使用Option Strict 关闭进行编译,但无法重现问题我无法确定。

请参阅:Early and Late Binding

答案 1 :(得分:0)

无法找到在VB中执行此操作的解决方案,我们采用了这种方式:

  1. 添加了一个新项目:Silverlight C#类库
  2. 构造函数接受两个参数,即动态对象和事件处理程序的地址,并执行添加处理程序的C#方法:

    public TwainHandler(动态twainSession,Delegate eventHandler) {         twainSession.AcquirePage + = eventHandler; }

  3. 构建了C#库,并添​​加了dll作为VB项目的参考。

    Dim t as TwainHandler = New TwainHandler(TwainSession,New AcquirePageDelegate(AddressOf AcquirePageEventHandler))

  4. 这样C#库就会动态地为事件添加处理程序(指向VB应用程序中的方法)。如果有人有更好的解决方案,请分享。