2017-05-09 12 views
-1

Hallo. Ich konvertiert diese C# -Code:vb.net Prozess Kommunikation mit Memory-Mapped-Dateien

Ich verwende dieses projet: https://code.msdn.microsoft.com/Inter-process-communication-e96e94e7

private void frmMain_Load(object sender, EventArgs e) 
    { 
     communicator = new MemoryMappedFileCommunicator("MemoryMappedShare", 4096); 

     // This process reads data that begins in the position 0 and writes starting from the position 2000. 
     communicator.ReadPosition = 0; 
     communicator.WritePosition = 2000; 

     // Creates an handler for the event that is raised when data are available in the 
     // MemoryMappedFile. 
     communicator.DataReceived += new EventHandler<MemoryMappedDataReceivedEventArgs>(communicator_DataReceived); 
     communicator.StartReader(); 
    } 

    private void communicator_DataReceived(object sender, MemoryMappedDataReceivedEventArgs e) 
    { 
     var receivedMessage = System.Text.Encoding.UTF8.GetString(e.Data); 
     lstMessages.Items.Add(receivedMessage); 
     lstMessages.SelectedIndex = lstMessages.Items.Count - 1; 

     // Sends a message as a response. 
     communicator.Write("Message from Windows App: data received at " + DateTime.Now);    
    } 

zu vb.net wie folgt aus:

Dim communicator As New MemoryMappedFileCommunicator("MemoryMappedShare", 4096) 

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

    ' This process reads data that begins in the position 2000 and writes starting from the position 0. 
    communicator.ReadPosition = 2000 
    communicator.WritePosition = 0 

    ' Creates an handler for the event that is raised when data are available in the MemoryMappedFile. 

    AddHandler communicator.DataReceived, AddressOf New EventHandler(Of MemoryMappedDataReceivedEventArgs)(communicator_DataReceived) 
    communicator.StartReader() 

End Sub 

Private Sub communicator_DataReceived(ByVal sender As Object, ByVal e As MemoryMappedDataReceivedEventArgs) 
    Dim receivedMessage = System.Text.Encoding.UTF8.GetString(e.Data) 
    lstMessages.Items.Add(receivedMessage) 
    lstMessages.SelectedIndex = lstMessages.Items.Count - 1 

    ' Sends a message as a response. 
    communicator.Write("Message from Windows App: data received at " + DateTime.Now) 
End Sub 

Nach der Konvertierung, bekomme ich Fehler in vb .net Code wie folgt: VB.NET ERROR

EDelegate 'System.EventHandler(Of MemoryMappedFileManager.MemoryMappedDataReceivedEventArgs)' requires an 'AddressOf' expression or lambda expression as the only argument to its constructor. 

An dieser Linie:

AddHandler communicator.DataReceived, AddressOf New EventHandler(Of MemoryMappedDataReceivedEventArgs)(communicator_DataReceived) 
+0

Welche Fehler? Du hast gerade ein Bild des Fehlers unterstrichen ... * was ist die Fehlermeldung *? –

+0

Ich sehe Ihr aktuelles Update, aber Sie haben die Fehlermeldung noch nicht angezeigt. Bitte ** poste die Fehlermeldung **. –

+0

Delegate 'System.EventHandler (von MemoryMappedFileManager.MemoryMappedDataReceivedEventArgs)' benötigt einen 'AddressOf'-Ausdruck oder Lambda-Ausdruck als einziges Argument für seinen Konstruktor. –

Antwort

0

Sie können nicht beide AddressOf und New EventHandler verwenden, da AddressOf auch einen Delegaten erstellt.

Die empfohlene Lösung ist, es zu ändern:

AddHandler communicator.DataReceived, AddressOf communicator_DataReceived 

Folgende Arbeiten genauso gut, aber ist jedoch weniger lesbar:

AddHandler communicator.DataReceived, New EventHandler(Of MemoryMappedDataReceivedEventArgs)(AddressOf communicator_DataReceived) 
+0

Wenn meine Antwort Ihr Problem löst, markieren Sie es bitte als "akzeptiert", indem Sie das ** Häkchen/Häkchen ** auf der linken Seite meines Posts drücken. - Für weitere Informationen siehe: [** Wie funktioniert die Annahme einer Antwort? **] (https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –

+0

A continue versuchen Sie oben Methoden, die Sie mir geben, aber wenn ich den Code durchführe: es erhält nicht eingehende Nachricht. –

+0

@ElikarKananeMugangane: Das ist ein anderes Problem, dem ich nicht gewachsen bin. Ich kann dir nicht helfen. Sie müssten es selbst debuggen oder eine andere Frage stellen. –