我正在尝试将这个用C#写成的代码转换成VB:
// Initialize the Message Broker Events
(Application.Current as App).MessageBroker.MessageReceived += new MessageReceivedEventHandler(MessageBroker_MessageReceived);
(Application.Current as App).MessageBroker.MessageReceived += new MessageReceivedEventHandler(MessageBroker_SpecialMessageReceived);这是我目前所拥有的,但当我运行它时,它总是抛出一个错误:
' Initialize the Message Broker Events
AddHandler TryCast(Application.Current, App).MessageBroker.MessageReceived, AddressOf MessageBroker_MessageReceived
AddHandler TryCast(Application.Current, App).MessageBroker.MessageReceived, AddressOf MessageBroker_SpecialMessageReceived我是不是做错了什么?
下面是我的代码的其余部分:
Partial Public Class MainWindow
Inherits Window
Public Sub New()
InitializeComponent()
' Initialize the Message Broker Events
'AddHandler TryCast(Application.Current, App).MessageBroker.MessageReceived, AddressOf MessageBroker_MessageReceived
'AddHandler TryCast(Application.Current, App).MessageBroker.MessageReceived, AddressOf MessageBroker_SpecialMessageReceived
TryCast(Application.Current, App).MessageBroker.MessageReceived += New MessageReceivedEventHandler(MessageBroker_MessageReceived)
TryCast(Application.Current, App).MessageBroker.MessageReceived += New MessageReceivedEventHandler(MessageBroker_SpecialMessageReceived)
End Sub
Private Sub MessageBroker_MessageReceived(ByVal sender As Object, ByVal e As MessageBrokerEventArgs)
' Use this event to receive all messages
Select Case e.MessageName.ToLower()
Case "message1"
' Do something with this message
Exit Select
Case "message2"
' Do something with this message
Exit Select
Case "etc."
' Do something with this message
Exit Select
Case Else
If Not String.IsNullOrEmpty(e.MessageObject.MessageBody) Then
MessageBox.Show(e.MessageObject.MessageBody)
End If
Exit Select
End Select
End Sub
Private Sub MessageBroker_SpecialMessageReceived(ByVal sender As Object, ByVal e As MessageBrokerEventArgs)
' Use this event to receive any special message objects
If TypeOf e.MessageObject Is MySpecialMessage Then
MessageBox.Show(DirectCast(e.MessageObject, MySpecialMessage).SpecialMessage)
End If
End Sub发布于 2011-12-16 04:45:03
试试这个:
TryCast(Application.Current, App).MessageBroker.MessageReceived += New MessageReceivedEventHandler(MessageBroker_MessageReceived)
TryCast(Application.Current, App).MessageBroker.MessageReceived += New MessageReceivedEventHandler(MessageBroker_SpecialMessageReceived)我使用的是http://converter.telerik.com/,它通常对我来说很好用
发布于 2011-12-16 04:45:55
试试这个,看看它是否有效
TryCast(Application.Current, App).MessageBroker.MessageReceived += New MessageReceivedEventHandler(MessageBroker_MessageReceived)
TryCast(Application.Current, App).MessageBroker.MessageReceived += New MessageReceivedEventHandler(MessageBroker_SpecialMessageReceived)发布于 2011-12-16 13:27:46
首先,C#代码不正确。
// Initialize the Message Broker Events
(Application.Current as App).MessageBroker.MessageReceived +=
new MessageReceivedEventHandler(MessageBroker_MessageReceived);
(Application.Current as App).MessageBroker.MessageReceived +=
new MessageReceivedEventHandler(MessageBroker_SpecialMessageReceived);它应该是,
// Initialize the Message Broker Events
((App)Application.Current).MessageBroker.MessageReceived +=
new MessageReceivedEventHandler(MessageBroker_MessageReceived);
((App)Application.Current).MessageBroker.MessageReceived +=
new MessageReceivedEventHandler(MessageBroker_SpecialMessageReceived);而VB会是,
CType(Application.Current, App).MessageBroker.MessageReceived +=
New MessageReceivedEventHandler(MessageBroker_MessageReceived)
CType(Application.Current, App).MessageBroker.MessageReceived +=
New MessageReceivedEventHandler(MessageBroker_SpecialMessageReceived)as和TryCast首先检查实例的类型,看看它是否与强制转换类型匹配。如果没有,它将返回null,您将得到一个NullReferenceException。相反,您应该使用(Type)instance或CType(instance, Type)直接转换类型。从逻辑上讲,这不会有什么不同,但你仍然应该理解其中的区别。:)
https://stackoverflow.com/questions/8526312
复制相似问题