-4

私はいくつかのイベントを管理しようとしています。

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 要素にもバインドされていません。

コードの更新:

イベントを処理しようとしています:

スクリーンショット: http://imgur.com/JmdA7YM

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 のクラスの名前です。

4

3 に答える 3

2

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
于 2014-09-26T15:53:51.647 に答える
1

こんなつもりですか?

var raiser = new EventRaiser();
raiser.NewMessage += raiser_NewMessage;

private void raiser_NewMessage(object sender, EventArgs e)
{
    //handle your event here
}

ただし、newMessageArgsクラスとNewMessageイベントは VB コードで公開する必要があります。

もちろん、VB コードを使用してアセンブリへの参照を C# プロジェクトに追加する必要があります。

于 2014-09-26T14:23:24.160 に答える