首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将事件处理代码从C#转换为VB.NET

将事件处理代码从C#转换为VB.NET
EN

Stack Overflow用户
提问于 2011-12-16 04:41:27
回答 3查看 670关注 0票数 1

我正在尝试将这个用C#写成的代码转换成VB:

代码语言:javascript
复制
// 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);

这是我目前所拥有的,但当我运行它时,它总是抛出一个错误:

代码语言:javascript
复制
' 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

我是不是做错了什么?

下面是我的代码的其余部分:

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

发布于 2011-12-16 04:45:03

试试这个:

代码语言:javascript
复制
TryCast(Application.Current, App).MessageBroker.MessageReceived += New MessageReceivedEventHandler(MessageBroker_MessageReceived)
 TryCast(Application.Current, App).MessageBroker.MessageReceived += New  MessageReceivedEventHandler(MessageBroker_SpecialMessageReceived)

我使用的是http://converter.telerik.com/,它通常对我来说很好用

票数 3
EN

Stack Overflow用户

发布于 2011-12-16 04:45:55

试试这个,看看它是否有效

代码语言:javascript
复制
TryCast(Application.Current, App).MessageBroker.MessageReceived += New MessageReceivedEventHandler(MessageBroker_MessageReceived)
TryCast(Application.Current, App).MessageBroker.MessageReceived += New MessageReceivedEventHandler(MessageBroker_SpecialMessageReceived)
票数 0
EN

Stack Overflow用户

发布于 2011-12-16 13:27:46

首先,C#代码不正确。

代码语言:javascript
复制
// 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);

它应该是,

代码语言:javascript
复制
// Initialize the Message Broker Events
((App)Application.Current).MessageBroker.MessageReceived +=
    new MessageReceivedEventHandler(MessageBroker_MessageReceived);

((App)Application.Current).MessageBroker.MessageReceived +=
    new MessageReceivedEventHandler(MessageBroker_SpecialMessageReceived);

而VB会是,

代码语言:javascript
复制
CType(Application.Current, App).MessageBroker.MessageReceived +=
    New MessageReceivedEventHandler(MessageBroker_MessageReceived)

CType(Application.Current, App).MessageBroker.MessageReceived +=
    New MessageReceivedEventHandler(MessageBroker_SpecialMessageReceived)

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8526312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档