端口被终止时监听串口
本文关键字:监听 串口 终止 | 更新日期: 2023-09-27 18:15:07
所以我有一个c# WinForm使用
SerialPort SerialPort1 = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
SerialPort1.Open()
SerialPort1.DataReceived += new SerialDataReceivedEventHandler(...)
监听由其他软件创建的几个虚拟COM端口(我无法控制它)
所以通常情况下它运行良好,除非当其他软件死亡或消失时,它创建的虚拟COM端口也消失或丢失
所以我的WinForm应用程序失败了,因为没有COM1可听
问题:当没有COM端口侦听时,我该如何处理此错误
非常感谢您的回复
将其放入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
}
有关异常的更细粒度,请参阅此处串口的msdn文档。
不,虚拟串行端口是由软件模拟的。如果那个软件失败了,那么当然就没有功能串行端口了。除了找到更好的软件,你别无他法。
如果这是常见的故障模式,当程序正在与USB设备交谈时拔出连接器,那么就不要麻烦了。无论谁这样做,都需要了解使用Windows"安全删除硬件"托盘图标选项是而不是可选的艰难方式。往往需要一些强化才能让他们意识到"不安全移除硬件"的作用。尽管奇怪的是,这样做的往往是程序员,而不是普通用户。可能是网站的偏见,而普通用户往往会自己发现这样做不是个好主意。事实并非如此,这些司机依靠人类的合作。必要的,因为串行端口不是插头&播放设备时,驱动程序无法发送"设备已用完,停止使用"的通知。好吧,除了故意硬崩溃你的程序。
如果唯一的问题是端口的数量是不可预测的,那么您可以检测如下所示的所有可用端口,并一次尝试一个。我曾经遇到过这个问题,当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
}
}