2016-05-03 3 views
0

Ich habe den folgenden Code, um Text aus verschiedenen Funktionen und Subs zu schreiben, aber das hat funktioniert ok, aber jetzt bekomme ich die Zielparameter Count Ausnahme, wenn ich den Delegaten von SerialPort DataReceived Ereignis aufrufen .Ziel Parameter Anzahl Ausnahme auf Delegat Sub

Ich kann nicht herausfinden, was ich falsch mache, Irgendwelche Ideen?

Delegate Sub PrintSmsLogDelegate(ByVal NewText As String, ByVal NewLine As Boolean) 

Protected Friend Sub PrintSmsLog(ByVal NewText As String, Optional ByVal NewLine As Boolean = True) 
    If Me.InvokeRequired Then 
     Dim Txt As New PrintSmsLogDelegate(AddressOf PrintSmsLog) 
     'Me.Invoke(Txt, NewText)'This fail too 
     Me.Invoke(Txt, New Object() {NewText}) '<--- TargetParameterCountException 
    Else 
     '...  
    End If 

End Sub 

Private Sub SmsSerialPort_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SmsSerialPort.DataReceived 

    '... code to receive data and save it in "Lines" variable 
    Dim Lines as String 

    Me.PrintSmsLog(Lines, False) 

End Sub 

Antwort

1

Das Problem ist, dass Ihre PrintSmsLogDelegate Delegiertenerklärung 2 erforderlichen Parameter enthält. Sie müssen also auch den 2. Parameter angeben.

Die Methodensignatur für Invoke Verfahren ist folgendes:
Function Control.Invoke(method As [Delegate], ParamArray args As Object()) As Object

So sollten Sie Ihre PrintSmsLogDelegate Delegatinstanz rufen mit zwei Parametern selbst (die Txt ist), wenn die PrintSmsLog Methode den zweiten Parameter nicht erforderlich.

Me.Invoke(Txt, NewText, True) 

Sie können die Invoke Methode mit einem einzelnen Array Parameter nicht nennen. Aufgrund des Schlüsselworts ParamArray wird automatisch ein Array mit den von Ihnen angegebenen Parametern erstellt.