我如何使用;“处理”;来自Visual Basic.NET的子句,其中包含使用C#编写的DLL?

我如何使用;“处理”;来自Visual Basic.NET的子句,其中包含使用C#编写的DLL?,c#,vb.net,interop,C#,Vb.net,Interop,在Visual Basic.NET应用程序中,是否有方法对用C#编写的DLL中引用的对象使用句柄?编译代码时会出现以下错误: 模块中的“句柄”必须指定 “WithEvents”变量用 单一标识符 我正在编写Visual Basic.NET应用程序,但我确实有C#库的源代码可用 我当前的代码如下所示: WithEvents Friend Module As ModuleNamespace.Module Sub EventHandler() Handles Module.Events.Event1

在Visual Basic.NET应用程序中,是否有方法对用C#编写的DLL中引用的对象使用
句柄
?编译代码时会出现以下错误:

模块中的“句柄”必须指定 “WithEvents”变量用 单一标识符

我正在编写Visual Basic.NET应用程序,但我确实有C#库的源代码可用

我当前的代码如下所示:

WithEvents Friend Module As ModuleNamespace.Module
Sub EventHandler() Handles Module.Events.Event1
    Console.WriteLine("Event1 fired.")
End Sub

Module
ModuleNamespace
Event1
替换为实际名称。

听起来您手头上好像没有一个对象实例来绑定事件。您可以尝试使用AddHandler而不是Handles关键字吗

例如:

Private Sub BindEvents(ByVal someObject AS ClassInLibrary)

  AddHandler someObject.EventName, AddressOf Foo

End Sub

Private Sub Foo(ByVal sender As Object, ByVal e As EventArgs)

End Sub

您需要一个模块级变量来包含对象实例。航空代码:

 Private WithEvents mMyObject As CSharpObject

 Private Sub MyEvent(...) Handles mMyObject.SomeEvent 

我现在正在使用AddHandler,但我只是想知道是否有更有效/更干净的方法来实现相同的目标,因为我的应用程序不需要运行时绑定。除非您有一个模块级变量,如MarkJ建议您自己调用AddHandler。当您使用WithEvents和Handles时,编译器实际上会发出一个属性,并在setter中调用AddHandler本身。