2013-04-12 73 views
1

我有一个使用D-Link GSM调制解调器发送/接收SMS消息的C#应用​​程序。杀死进程后释放COM端口

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

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

当我试图在应用程序加载时,如果D-Link进程存在,我使用process.kill()将其杀死。这会杀死应用程序,但COM4仍然无法访问。

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

回答

1

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

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

0

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

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

    serialPort.Open(); 

    // do something 
} 

当你杀死这个过程时,它不会总是被清理干净,但是这样一来,你给它一个战斗机会。