2011-12-15 2 views
1

Я пытаюсь преобразовать этот код, написанный на C# на VB:Преобразование кода обработки событий из C# в VB.NET

// 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); 

Это то, что я в настоящее время, но он всегда выдает ошибку, когда я бегу it:

' 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 
+0

[Этот сайт] (http://www.developerfusion.com/tools/convert/csharp-to-vb/) - хороший инструмент для преобразования языков .net. – Jim

ответ

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/ который обычно работает хорошо для меня

+0

то же самое здесь .. вот как я быстро получил ответ. LOL – MethodMan

+0

Я дал вам UpVote – MethodMan

+0

Ха-ха .. отличные умы .. –

0

попробовать это и посмотреть, если он будет работать

TryCast(Application.Current, App).MessageBroker.MessageReceived += New MessageReceivedEventHandler(MessageBroker_MessageReceived) 
TryCast(Application.Current, App).MessageBroker.MessageReceived += New MessageReceivedEventHandler(MessageBroker_SpecialMessageReceived) 
-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) 

as и TryCast первый проверить тип экземпляра, чтобы увидеть, если он соответствует типу отливки. Если это не так, оно вернет null, и вы получите исключение NullReferenceException. Вместо этого вы должны лить тип напрямую, используя (Type)instance или CType(instance, Type). Не то, что будет иметь значение, логично, но вы все равно должны понимать разницу. :)

Смежные вопросы