我如何使用;“处理”;来自Visual Basic.NET的子句,其中包含使用C#编写的DLL?
在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
句柄
?编译代码时会出现以下错误:
模块中的“句柄”必须指定
“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本身。