2014-09-26 3 views
-4

Я пытаюсь управлять каким-либо событием.Обработка событий с помощью C# с VB.NET

У меня есть мой основной проект, написанный на 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, что вызывает событие.

+0

http://msdn.microsoft.com/en-us/library/edzehd2t%28v=vs.110%29.aspx –

+2

Язык написано в не должно быть важно. В чем именно проблема, с которой вы сталкиваетесь? – Chris

+0

просто: как я могу это сделать? Как я могу увидеть событие из другого проекта? Как объявить обработчик события в C# и прочитать параметры? –

ответ

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#.

+0

да ... Я обновил код –

+0

@PieroAlberto Вы создали новое событиеMessageArgs и NewMessage в своем коде VB? И какие именно ошибки вы получаете? –

+0

Да, они публичные, вы можете видеть это в вопросе. –

2

Изменить код VB использовать делегат, который точно соответствует «newMessageArgs»:

Public Delegate Sub CustomEventHandler(ByVal sender As Object, ByVal e As newMessageArgs) 
Public Event NewMessage As CustomEventHandler 
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 
Смежные вопросы