我有一个使用D-Link GSM调制解调器发送/接收短信的C#应用程序。
现在由于某种原因,D-Link USB在一段时间后(随机)自动断开连接并重新连接。当它重新连接时,它会打开D-Link连接管理器,它保留COM4。
现在,当我的应用程序运行并尝试发送短信时,它失败了,因为它找不到任何可用的(已经在使用我的D-Link管理器)。
当我在应用程序加载时尝试使用D-Link进程时,我正在使用process.kill()查杀它。这会杀死应用程序,但COM4仍然无法访问。
有没有办法杀死进程并以编程方式释放COM端口?
答案 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
}
当你杀死这个过程时,它不会总是得到清理,但是这样,你就给它一个战斗机会。