2014-09-26 31 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 – 2014-09-26 14:20:33

+2

它是用不應該是很重要的語言。你遇到的問題究竟是什麼? – Chris 2014-09-26 14:21:09

+0

簡單地說:我該怎麼做?我如何從另一個項目中看到事件?如何在C#中聲明事件處理程序並讀取參數? – 2014-09-26 14:23:47

回答

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

yes ...我更新了代碼 – 2014-09-26 14:29:16

+0

@PieroAlberto您是否在您的VB代碼中公開newMessageArgs和NewMessage事件?你究竟得到了哪些錯誤? – 2014-09-26 14:31:35

+0

是的,它們是公開的,你可以在問題中看到它。 – 2014-09-26 14:33:37

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