2016-05-03 3 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 необходимый параметр. Итак, вы должны указать и второй параметр.

Метод подписи для Invoke метода заключается в следующем:
Function Control.Invoke(method As [Delegate], ParamArray args As Object()) As Object

Таким образом, вы должны позвонить своему PrintSmsLogDelegate делегат экземпляр (который Txt) с двумя параметрами, даже если метод PrintSmsLog не требует 2-й параметр.

Me.Invoke(Txt, NewText, True) 

Вы не можете вызвать Invoke метод с одним параметром массива. Из-за ParamArray ключевое слово array будет автоматически создано из указанного вами нескольких параметров.

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