1

我正在尝试将这段用 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
4

3 回答 3

3

尝试这个:

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-15T20:45:03.227 回答
0

试试这个,看看它是否会起作用

TryCast(Application.Current, App).MessageBroker.MessageReceived += New MessageReceivedEventHandler(MessageBroker_MessageReceived)
TryCast(Application.Current, App).MessageBroker.MessageReceived += New MessageReceivedEventHandler(MessageBroker_SpecialMessageReceived)
于 2011-12-15T20:45:54.823 回答
-1

首先,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)

asTryCast首先检查实例的类型以查看它是否与强制转换类型匹配。如果没有,它会返回null,你会得到一个 NullReferenceException。(Type)instance相反,您应该使用或直接转换类型CType(instance, Type)。从逻辑上讲,这不会有所作为,但您仍然应该了解其中的区别。:)

于 2011-12-16T05:27:46.217 回答