Vb.net .ReadLine()错误,Visual Basic 2010

Vb.net .ReadLine()错误,Visual Basic 2010,vb.net,serial-port,arduino,Vb.net,Serial Port,Arduino,我有一个将数据从串行端口存储到阵列的代码。但我遇到了一个问题。我正在使用的代码在我关闭串行端口时或当串行端口运行超过20秒时出错,然后Visual Basic写入“由于线程退出或应用程序请求,i/O操作已中止”。下面是代码。所以也许有人能帮上忙: Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Ha

我有一个将数据从串行端口存储到阵列的代码。但我遇到了一个问题。我正在使用的代码在我关闭串行端口时或当串行端口运行超过20秒时出错,然后Visual Basic写入“由于线程退出或应用程序请求,i/O操作已中止”。下面是代码。所以也许有人能帮上忙:

Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
        Dim i As Long
        i = 0
        While SerialPort1.IsOpen = True
            Do While i < 29
                incoming(i) = SerialPort1.ReadLine
                i = i + 1
            Loop
        End While

    End Sub
Private Sub-SerialPort1\u DataReceived(ByVal sender作为System.Object,ByVal e作为System.IO.Ports.SerialDataReceivedEventArgs)处理SerialPort1.DataReceived
我想我会坚持多久
i=0
而SerialPort1.IsOpen=True
当我<29岁时做
传入(i)=SerialPort1.ReadLine
i=i+1
环
结束时
端接头

29是一个不吉利的数字。首先不要在事件处理程序内部循环,将“i”变量移到方法外部,一次只读取一行。因此,当线圈循环时,不要用Close()拉动地毯。如果你想保留你所拥有的(没有),那么你需要Try/Catch来捕获从Close()调用中得到的异常。尝试将
While SerialPort1.IsOpen=True
循环放入
Do While
循环中。谢谢你,Hans,我会尝试一下……不,它不起作用。。。