投稿者 vb素人  (社会人) 投稿日時 2017/7/7 09:06:31
魔界の仮面弁士さま

いつも丁寧な説明ありがとうございます。
data.lengthを2に設定し、2バイト溜まっていなければスルーする形でテストしました。

 Dim data(SerialPort1.BytesToRead - 1) As Byte
 SerialPort1.Read(data, 0, 2)

 If SerialPort1.BytesToRead < 2 Then
 '受信データが溜まってない場合は、Read せずにスルー 
 Return
 End If

しかし、次のメッセージが出てしまいます。

**配列のオフセット及び長さが範囲を超えているか、カウンターがソースコレクションの
インデックスから最後までの要素の数より大きい値です。**

SerialPort1.Read(data, 0, 2)
⇒オフセット0で、2バイト分のデータをdataに格納しているはずなのですが、
できていないということでしょうか。



    Private Delegate Sub Delegate_RcvDataToTextBox(data As Byte())

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

        If SerialPort1.IsOpen = False Then
            Return
        End If

        Try
            Dim data(SerialPort1.BytesToRead - 1) As Byte
            SerialPort1.Read(data, 0, 2)

            If SerialPort1.BytesToRead < 2 Then
                '受信データが溜まってない場合は、Read せずにスルー 
                Return
            End If

            Invoke(New Delegate_RcvDataToTextBox(AddressOf Me.RcvDataToTextBox), data)

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try





    End Sub

    Private Sub RcvDataToTextBox(data As Byte())

        '受信データをテキストボックスの最後に追記する.
        If IsNothing(data) = False Then
            'RcvTextBox.AppendText(CStr(data))

            Dim a As Short = BitConverter.ToInt16(data, 0)   '符号付き 2 バイト整数に変換 
            Dim b As String = Convert.ToString(a, 10)  '10進数表記の "1023" に変換 
            RcvTextBox.AppendText(b)
 
        End If

    End Sub