杀死进程后释放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端口

终止进程不会给它清理的机会。如果客户端异常终止,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
}

当你终止进程时,它并不总是会被清理干净,但是通过这种方式,你给了它一个战斗的机会。

应该归咎于设计糟糕的操作系统,因为它不能在杀死进程后清理进程的资源