因此,我已经与这个问题作斗争了大约一周,并且认为我知道这个问题,但在确定问题之前我不想在那里报告答案。
简而言之,我在尝试使用该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我会得到:

这基本上与没有 try/catch 时发生的情况相同。我想做的是说我正在尝试这样做:我不在乎它会引发错误,无论如何都要这样做。
我正在尝试在 C# 中打开 COM 端口,但收到 IO 异常并显示错误消息:
\n\n\n\n\n参数不正确
\n
我看到这篇文章:SerialPort.Open() --IOException \xe2\x80\x94 \xe2\x80\x9c参数不正确。\xe2\x80\x9d \
n描述了相同的问题,但设置RtsEnable为true没有解决我的问题(没有改变)。
这是我的代码:
\n\ncmp_Comport.PortName = "COM6";\ncmp_Comport.BaudRate = 9600;\ncmp_Comport.Parity = Parity.None;\ncmp_Comport.StopBits = StopBits.One;\ncmp_Comport.DataBits = 8;\ncmp_Comport.Handshake = Handshake.None;\ncmp_Comport.RtsEnable = true;\ncmp_Comport.DataReceived += new SerialDataReceivedEventHandler(CMP_DadaReceived);\ncmp_Comport.Open(); // ==> Causes exception\nRun Code Online (Sandbox Code Playgroud)\n\n这是完整的异常堆栈跟踪:
\n\n\n在 System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
\n 在 System.IO.Ports.InternalResources.WinIOError()
\n 在 System.IO.Ports.SerialStream.InitializeDCB(Int32 baudRate, Parity 奇偶校验, Int32 dataBits、StopBits stopBits、布尔discardNull)
\n 在 System.IO.Ports.SerialStream..ctor(String portName、Int32 baudRate、Parity 奇偶校验、Int32 dataBits、StopBits stopBits、Int32 readTimeout、Int32 writeTimeout、Handshake 握手、Boolean …