Vb.net SerialPort.Write(字符串)问题:与UI线程进行同步调用

Vb.net SerialPort.Write(字符串)问题:与UI线程进行同步调用,vb.net,serial-port,ui-thread,begininvoke,timeoutexception,Vb.net,Serial Port,Ui Thread,Begininvoke,Timeoutexception,我搜索并发现SerialPort类事件具有与UI线程的同步调用,因此;我已经使用带有DataReceived事件的委托在UI线程上启动InVoke,下面是我的DataReceived事件代码 Delegate Sub DataRXPointer(ByVal Buffer As String) '########### Data Receive Handler ########### Private Sub COMPort_DataReceivedHandler(sender As Object

我搜索并发现SerialPort类事件具有与UI线程的同步调用,因此;我已经使用带有DataReceived事件的委托在UI线程上启动InVoke,下面是我的DataReceived事件代码

Delegate Sub DataRXPointer(ByVal Buffer As String)

'########### Data Receive Handler ###########
Private Sub COMPort_DataReceivedHandler(sender As Object, e As SerialDataReceivedEventArgs) Handles COMPort.DataReceived
    Me.BeginInvoke(New DataRXPointer(AddressOf handleDataRX), COMPort.ReadExisting)
End Sub
但是SerialPort.Write(String)方法中存在一个问题,因为当我断开端口与应用程序的连接(意味着我关闭路由器)时,UI线程挂起。对于另一种解决方案,我已将WriteTimeout值指定为5000(5秒),并在try-and-catch块中捕获TimeoutException。UI线程仍然挂起约25-30秒,然后发生异常,我处理并关闭端口

    WriteTimeout = 5000     '// 5-sec
    ReadTimeout = 5000     '// 5-sec

    Try
        If COMPort.IsOpen Then
            COMPort.Write(dataToSend)
        End If

    Catch ex As TimeoutException
        If COMPort IsNot Nothing Then
            COMPort.Dispose()
            COMPort.Close()
        End If

        Me.Close()

    End Try

因为它的挂起时间大约为25-30秒,所以我假设这个方法也有一个与UI线程的同步调用。是否有任何解决方案不将serialPort与UI线程同步意味着如何使用此serialPort类在另一个线程上完全工作?

我发现挂起30-35秒是因为真正的端口驱动程序。驱动程序本身需要30-35秒来断开与路由器的连接。驱动程序将其状态更改为“重新连接…”后,应用程序将按照正常方式释放其作业