2016-05-03 6 views
0

さまざまな関数とサブシステムからのテキストを書き込むために以下のコードを書いていますが、これは正常ですが、現在はSerialPort DataReceivedイベントからデリゲートを呼び出すと、 。デリゲートでのターゲットパラメータのカウント例外Sub

私は何が間違っているのか分かりません。

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 

答えて

1

問題は、あなたのPrintSmsLogDelegateデリゲートの宣言は、2必要なパラメータが含まれていることです。 したがって、2番目のパラメータも指定する必要があります。

Invokeメソッドのメソッドシグネチャはこれです:
Function Control.Invoke(method As [Delegate], ParamArray args As Object()) As Object

ですから、PrintSmsLog方法は、第二のパラメータを必要としない場合でも、二つのパラメータで(Txtである)あなたのPrintSmsLogDelegateデリゲートのインスタンスを呼び出す必要があります。

Me.Invoke(Txt, NewText, True) 

Invokeメソッドは、1つの配列パラメーターで呼び出すことはできません。 ParamArrayキーワードのため、指定した複数のパラメータの配列が自動的に作成されます。

関連する問題