杀死进程后释放COM端口

时间:2013-04-12 04:12:09

标签: c# serial-port

我有一个使用D-Link GSM调制解调器发送/接收短信的C#应用​​程序。

现在由于某种原因,D-Link USB在一段时间后(随机)自动断开连接并重新连接。当它重新连接时,它会打开D-Link连接管理器,它保留COM4。

现在,当我的应用程序运行并尝试发送短信时,它失败了,因为它找不到任何可用的(已经在使用我的D-Link管理器)。

当我在应用程序加载时尝试使用D-Link进程时,我正在使用process.kill()查杀它。这会杀死应用程序,但COM4仍然无法访问。

有没有办法杀死进程并以编程方式释放COM端口?

2 个答案:

答案 0 :(得分:1)

杀死一个进程并没有给它一个清理的机会。如果客户端异常终止,COM端口很容易挂起。

试试Process.CloseMainWindow。希望该过程将通过正常关闭和关闭COM端口来响应。但是,你必须给它一些时间来关闭,你可以使用Process.WaitForExit

答案 1 :(得分:0)

SerialPort类实现IDisposable正是出于这个原因:当端口变量超出范围时清理非托管资源(如端口本身)。

using (var serialPort = new SerialPort())
{
    // Set the read/write timeouts
    serialPort.ReadTimeout = 500;
    serialPort.WriteTimeout = 500;

    serialPort.Open();

    // do something
}

当你杀死这个过程时,它不会总是得到清理,但是这样,你就给它一个战斗机会。