所以我有一个使用
的C#WinFormSerialPort SerialPort1 = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
SerialPort1.Open()
SerialPort1.DataReceived += new SerialDataReceivedEventHandler(...)
收听其他软件创建的几个虚拟COM端口(我无法控制)
所以一般来说它很顺利,除非当其他软件已经死亡或消失时,它创建的虚拟COM端口也消失或丢失
所以我的WinForm应用程序失败了,因为没有COM1可以收听
问题:当没有要侦听的COM端口时,我应该如何处理此错误
非常感谢您的回复
答案 0 :(得分:1)
将它放在try-catch语句中,如果发生了不好的事情,则向用户打印一条消息。
try
{
SerialPort SerialPort1 = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
SerialPort1.Open()
SerialPort1.DataReceived += new SerialDataReceivedEventHandler(...)
}
catch(Exception e)
{
//Print error to user
}
有关异常的更精细粒度,请参阅串行端口here的msdn文档。
答案 1 :(得分:1)
嗯,不,虚拟串口是由软件模拟的。如果该软件失败,那么当然没有功能性串行端口了。除了找到更好的软件之外,你无能为力。
如果这是常见的故障模式,在程序与之通话时将USB设备的连接器猛拉,那么就不要打扰。无论是谁,都需要学习使用Windows"安全删除硬件"托盘图标选项不可选。它往往需要一些强化来让他们意识到什么"不安全地删除硬件"确实。虽然,奇怪的是,它往往是程序员这样做,很少是普通用户。可能是网站偏见和普通用户只是倾向于自己弄清楚这样做并不是一个好主意。不是,这些司机依靠人类合作。必要的,因为串口不是插头和插件玩设备,驱动程序没有办法提供一个"设备已经消失,停止使用"通知。好吧,除了故意破坏你的程序之外。
答案 2 :(得分:0)
如果唯一的问题是端口号是不可预测的,您可以检测到所有可用端口,如下所示,并一次尝试一个。当usb设备有时显示为COM1而其他时间显示为COM5时,我曾遇到此问题
string[] availablePorts = SerialPort.GetPortNames();
foreach (string strPortName in availablePorts)
{
try
{
SerialPort SerialPort1 = new SerialPort(strPortName, 9600, Parity.None, 8, StopBits.One);
SerialPort1.Open();
}
catch (Exception e)
{
//Print error to user
}
}