使用从VB.NET引发的C#处理事件
本文关键字:处理事件 NET VB | 更新日期: 2023-09-27 18:24:52
我正在尝试管理一些事件。
我有我的主要项目,用C#编写,我还添加了另一个项目,用VB.NET.编写
在VB.NET项目中,我有一个类,引发了一个事件:
Public Class newMessageArgs
Inherits EventArgs
Public Property messageCode As String
Public Property appName As String
End Class
Public Class EventRaiser
Event NewMessage As EventHandler
Sub MessageEvent(ByVal typeEvent As String, ByVal messageCode As String, appName As String)
If typeEvent = "newMessage" Then
Dim args As newMessageArgs = New newMessageArgs()
args.appName = appName
args.messageCode = messageCode
RaiseEvent NewMessage(Me, args)
End If
End Sub
End Class
引发事件的方法是从我的VB.NET代码中调用的,但我必须用C#代码来处理它。我该怎么做?
此事件未绑定到任何xaml元素。
代码更新:
尝试处理事件:
屏幕截图:https://i.stack.imgur.com/dD4uB.jpg
attivazione.EventRaiser raiser = new attivazione.EventRaiser();
raiser.NewMessage += raiser_NewMessage; //error: "no overloads for raiser_NewMessage matches the delegate system.eventhandler", underlining red raiser_NewMessage
private void raiser_NewMessage(object sender, newMessageArgs e)
{
//handle your event here
}
Attivazione是VB.NET中引发事件的类的名称。
修改VB代码以使用与"newMessageArgs"完全匹配的委托:
Public Delegate Sub CustomEventHandler(ByVal sender As Object, ByVal e As newMessageArgs)
Public Event NewMessage As CustomEventHandler
您的vb.net
委托签名不正确。您需要创建一个与事件参数匹配的NewMessage
委托。
Public Class NewMessageEventArgs
Inherits EventArgs
Public Property MessageCode As String
Public Property AppName As String
End Class
Public Delegate Sub NewMessageEventHandler(sender As Object, e As NewMessageEventArgs)
Public Class EventRaiser
Public Event NewMessage As NewMessageEventHandler
Public Sub MessageEvent(ByVal typeEvent As String, ByVal messageCode As String, appName As String)
If (typeEvent = "newMessage") Then
RaiseEvent NewMessage(Me, New NewMessageEventArgs() With {.AppName = appName, .MessageCode = messageCode})
End If
End Sub
End Class
你打算这样做吗?
var raiser = new EventRaiser();
raiser.NewMessage += raiser_NewMessage;
private void raiser_NewMessage(object sender, EventArgs e)
{
//handle your event here
}
但是newMessageArgs
类和NewMessage
事件在VB代码中应该是公共的。
当然,您应该在C#项目中添加对带有VB代码的程序集的引用。