如何忽略异常并完成尝试

tmw*_*ods 0 c# serial-port ioexception

因此,我已经与这个问题作斗争了大约一周,并且认为我知道这个问题,但在确定问题之前我不想在那里报告答案。

简而言之,我在尝试使用该SerialPort.Open()命令时收到 IOException。事实证明,这是很常见的,大多数终端程序实际上也是这样做的,但它们只是忽略它。请阅读我上面的帖子以了解完整的故事。现在我想做的是忽略 IOException 但仍然打开串行端口。我不能用 try/catch 来做到这一点,或者至少我不知道如何做。

我想知道是否有一种方法可以尝试某些事情并以某种方式声明“我知道会抛出一个问题,这是一个安全的问题,我选择忽略异常并继续执行任务”。需要明确的是,我不想忽略该错误然后继续。我想忽略该错误并仍然完成操作

以下是我的最佳猜测,但它不起作用。

        try
        {
            serialPort1.Open();               
        }
        catch (System.IO.IOException)
        {
            MessageBox.Show("An IO Exception occurred.");
        }
        finally
        {          
            //SAFELY IGNORE ERROR AND DO TASK ANYWAY HERE
        }
Run Code Online (Sandbox Code Playgroud)

如果有人能帮助我解决这个问题,我将不胜感激。

编辑:如果我之后添加代码,serialport1.Open我会得到: IOException 的屏幕截图

这基本上与没有 try/catch 时发生的情况相同。我想做的是说我正在尝试这样做:我不在乎它会引发错误,无论如何都要这样做。

Ben*_*igt 5

一般来说,如果您有一行代码导致异常,并且无论异常是否发生,都需要完成额外的工作,您应该只使用 a ,并将您想要完成的内容放在/catch之外(之后)。trycatch


对于您的特定情况(在您的其他问题中描述),您正在处理 .NET 可怕的破坏System.IO.Ports.SerialPort。打开串行端口成功,但这SerialPort.Open是一种复杂的方法,它会执行一堆额外的操作,并且如果任何额外的(和不必要的)操作失败,则坚持关闭端口。我还发现了其他问题System.IO.Ports.SerialPort(例如无法通过内部设备名称打开端口)。IMO,越早摆脱 System.IO.Ports.SerialPort越好。

您可以 p/invoke Win32 串行端口函数(CreateFile其余的都在这里)或找到已经编写了包装器库的人(我做到了,但它不公开)。