串口在休眠/恢复后表现得很奇怪?

时间:2013-12-05 17:59:00

标签: vb.net serial-port

伙计们,在计算机进入休眠模式并恢复后,我的vb.net应用程序出现了一个奇怪的问题。在进入睡眠模式之前,我关闭所有串口并将其设置为空...

Private Sub SystemEvents_PowerModeChanged(ByVal sender As Object, ByVal e As PowerModeChangedEventArgs)
    oEventLog.WriteEntry("Power change detected: " & e.Mode.ToString)
    txtStatus.AppendText("Power change detected: " & e.Mode.ToString & vbCrLf)
    If e.Mode <> PowerModes.Resume Then

        Try
            If Input IsNot Nothing Then
                Input.Dispose()
                Input.Close()
                Input = Nothing
            End If

            If Output IsNot Nothing Then
                Output.Dispose()
                Output.Close()
                Output = Nothing
            End If
        Catch
            txtStatus.AppendText(Err.Description)
        End Try


    Else
        initilizeSerialPorts()
    End If

End Sub

当计算机恢复时,我再次初始化串口。问题是,当我再次尝试打开它时,它说它们已经在使用中。所以我加载了进程资源管理器以查看它打开了什么,它仍然是我的应用程序!因此,似乎关闭它们并将它们设置为什么都不做。如果我关闭我的应用程序并重新运行它一切正常。

Private Function initilizeSerialPorts() As Boolean

    If Input IsNot Nothing Then
        Input.Dispose()
        Input.Close()
        Input = Nothing
    End If

    If Output IsNot Nothing Then
        Output.Dispose()
        Output.Close()
        Output = Nothing
    End If

    Input = New SerialPort(cmboInput.SelectedItem.ToString)
    Output = New SerialPort(cmboOutput.SelectedItem.ToString, Input.BaudRate, Input.Parity, Input.DataBits, Input.StopBits)

    Me.Refresh()

****MSGBOX HERE MAKES IT WORK?!!****

    Try
        If Not Input.IsOpen Then
            Input.Open()
        Else
            MsgBox("Unable to open the serial port " & Input.PortName)
            Return False
        End If
    Catch
        MsgBox("Unable to initalize serial port " & Input.PortName & vbCrLf & "Error: " & Err.Number.ToString & " " & Err.Description)
    End Try



    Try
        If Not Output.IsOpen Then
            Output.Open()
        Else
            MsgBox("Unable to open the serial port " & Output.PortName)
            Return False
        End If
    Catch
        MsgBox("Unable to initalize serial port " & Output.PortName & vbCrLf & "Error: " & Err.Number.ToString & " " & Err.Description)
    End Try


    Return True




End Function

好的,这里是踢球者...如果我再次打开我的端口之前放了一个消息框,它有效吗?没有消息框,我得到一个未能打开的端口消息,它正在使用中。有什么想法可能会发生这种情况吗?

提前致谢

0 个答案:

没有答案