使用从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.NET引发的C#处理事件

修改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代码的程序集的引用。