Как проверить, если соединение Bluetooth закрыто или не может быть создано с помощью vb.net? - PullRequest
2 голосов
/ 22 января 2012

Я создал простое приложение на vb.net, которое получает данные с устройства Bluetooth (простые строки, такие как «90123.9mm»).

Есть ли способ проверить, закрыло ли устройство соединение?

Я пытался поместить код в таймер

If SerialPort1 Is Nothing Then
    MsgBox("no connect")
End If

If Not (SerialPort1.IsOpen) Then
    MsgBox("no connect")
End If

, но безуспешно.

Вот код подключения и приема.

Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click
    SerialPort1.PortName = "COM22"
    SerialPort1.BaudRate = "9600"
    SerialPort1.Parity = IO.Ports.Parity.None
    SerialPort1.StopBits = IO.Ports.StopBits.One
    SerialPort1.DataBits = 8
    SerialPort1.Open()

    If SerialPort1 Is Nothing Then
        MsgBox("no connect")
    End If

    If Not (SerialPort1.IsOpen) Then
        MsgBox("no connect")
    End If

    btnConnect.Enabled = False
    btnDisconnect.Enabled = True

End Sub

Private Sub btnDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisconnect.Click
    SerialPort1.Close()

    btnConnect.Enabled = True
    btnDisconnect.Enabled = False
End Sub

Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    ReceivedText(SerialPort1.ReadExisting())    'aftomata kalite kathe fora pou dexomai nea dedomena 
End Sub

Private Sub ReceivedText(ByVal [text] As String)

    If Me.rtbReceived.InvokeRequired Then
        Dim x As New SetTextCallback(AddressOf ReceivedText)
        Me.Invoke(x, New Object() {(text)})
    Else
        Me.rtbReceived.Text &= [text]
    End If
End Sub

Ответы [ 2 ]

4 голосов
/ 23 января 2012

Просто попробуйте с добавлением попробуйте поймать блоки

Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click

    '--close the serail port if it is open --
    If serialPort1.IsOpen Then
        serialPort1.Close()
    End If

    Try
        '-- configure the various parameters of the serial port --
        With serialPort1 
            .PortName = "COM22"
            .BaudRate = 9600
            .Parity = IO.Ports.Parity.None
            .StopBits = IO.Ports.StopBits.One
            .DataBits = 8
        End With

        ' -- now open the port
            serialPort1.Open()

        ' -- update the status if you like and 
        ' -- enable/disable the buttons --
          btnConnect.Enabled = False
          btnDisconnect.Enabled = True
     Catch ex As Exception
        MsgBox(ex.ToString())
     End Try                  
End Sub

Private Sub btnDisconnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDisconnect.Click

    Try
        ' -- close the serial port here --
        SerialPort1.Close()
        ' -- update the status if you like and 
        ' -- enable/disable the buttons --

        btnConnect.Enabled = True
        btnDisconnect.Enabled = False
   Catch ex As Exception
    MsgBox(ex.ToString())

End Sub
1 голос
/ 25 января 2012

Это одна из проблем использования виртуальных COM-портов - скрыта вся видимость подключения к удаленному устройству и любые проблемы с подключением.Вот почему я всегда стараюсь использовать API прямой связи.Например, можно использовать мою библиотеку 32feet.NET для прямого подключения Bluetooth.

См., Например, http://32feet.codeplex.com/wikipage?title=Bluetooth%20Serial%20Ports http://32feet.codeplex.com/wikipage?title=General%20Bluetooth%20Data%20Connections и т. Д.

...