杀死进程后释放COM端口
本文关键字:COM 端口 释放 进程 | 更新日期: 2023-09-27 18:08:40
我有一个使用D-Link GSM Modem发送/接收短信的c#应用程序。
现在由于某种原因,D-Link USB断开连接,并在一段时间(随机)后自动重新连接。当它重新连接时,它打开D-Link连接管理器,该连接管理器保留COM4。
现在,当我的应用程序运行并试图发送短信时,它失败了,因为它没有找到任何可用的(已经在使用我的D-Link管理器)。
当我尝试在应用程序加载时,如果D-Link进程在那里,我使用Process .kill()杀死它。这将终止应用程序,但COM4仍然不可访问。
是否有一种方法可以杀死进程并以编程方式释放COM端口?
终止进程不会给它清理的机会。如果客户端异常终止,COM端口很容易挂起。
Process.CloseMainWindow试试。希望,进程将通过正常关闭和关闭COM端口来响应。但是,您必须给它一些时间来关闭它,为此您可以使用Process.WaitForExit.
SerialPort
类实现IDisposable
正是出于这个原因:当port变量超出作用域时,清理非托管资源(如端口本身)。
using (var serialPort = new SerialPort())
{
// Set the read/write timeouts
serialPort.ReadTimeout = 500;
serialPort.WriteTimeout = 500;
serialPort.Open();
// do something
}
当你终止进程时,它并不总是会被清理干净,但是通过这种方式,你给了它一个战斗的机会。
应该归咎于设计糟糕的操作系统,因为它不能在杀死进程后清理进程的资源