在 Visual Studio 中处理异常

Posted

技术标签:

【中文标题】在 Visual Studio 中处理异常【英文标题】:Handling Exception in Visual Studio 【发布时间】:2014-02-05 09:46:03 【问题描述】:

我无法处理这些导致我的程序冻结的错误。

如何处理所有这些? 这是我的调试器输出:

A first chance exception of type 'System.IO.IOException' occurred in System.dll
A first chance exception of type 'System.InvalidOperationException' occurred in System.dll
A first chance exception of type 'System.InvalidCastException' occurred in Microsoft.VisualBasic.dll
A first chance exception of type 'System.TimeoutException' occurred in System.dll
A first chance exception of type 'System.IO.IOException' occurred in System.dll

我用过

Try
    Dim str As String = SerialPort.ReadLine()
Catch ex As Exception
    MsgBox(ex)
End Try

但程序仍然冻结!

【问题讨论】:

那些是第一次机会例外,应该被忽略。它们不会导致您的程序冻结。 如果没有什么可看的…… 接收第一次机会异常通知 (msdn.microsoft.com/en-us/library/dd997368%28v=vs.110%29.aspx) 但正如 John 所说,它们不会导致您的程序冻结,似乎您的 SerialPort 未正确初始化。 【参考方案1】:

ReadLine 方法会阻塞程序,直到它完成读取。

您应该像这样使用 DataReceived 事件:

Public WithEvents serial As New SerialPort("COM1")
Public Sub serial_OnDataReceived(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs) Handles serial.DataReceived
    MsgBox(e.ToString)
End Sub

当然 Open() 你的 SerialPort ;)

编辑:

如果你真的想使用 ReadLine(),试着设置一个超时时间:

Try
    SerialPort.ReadTimeout = 1000
    Dim str As String = SerialPort.ReadLine()
Catch ex As Exception
    MsgBox(ex)
End Try

它应该停止阅读,但我已经遇到过这样的问题。

【讨论】:

以上是关于在 Visual Studio 中处理异常的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 2010 中混合异常处理模型的后果是啥?

visual studio 2012 启动出现如下错误,怎么处理

Visual Studio 不会因用户未处理的异常而中断

我可以让 Visual Studio 停止任务代码中未处理的异常吗?

Visual Studio - 调试

Visual Studio 2015 中断未处理的异常不起作用