C# 终止进程后释放COM端口
我有一个C#应用程序,它使用D-Link GSM调制解调器发送/接收SMS消息 现在由于某种原因,D-Link USB会在一段时间后自动断开并重新连接(随机)。当它重新连接时,会打开D-Link连接管理器,该管理器保留COM4 现在,当我的应用程序运行并尝试发送SMS时,它失败了,因为它找不到任何可用的(已经在使用我的D-Link管理器) 当我在应用程序加载时尝试D-Link进程是否存在时,我正在使用Process.kill()终止它。这会终止应用程序,但COM4仍然无法访问C# 终止进程后释放COM端口,c#,serial-port,C#,Serial Port,我有一个C#应用程序,它使用D-Link GSM调制解调器发送/接收SMS消息 现在由于某种原因,D-Link USB会在一段时间后自动断开并重新连接(随机)。当它重新连接时,会打开D-Link连接管理器,该管理器保留COM4 现在,当我的应用程序运行并尝试发送SMS时,它失败了,因为它找不到任何可用的(已经在使用我的D-Link管理器) 当我在应用程序加载时尝试D-Link进程是否存在时,我正在使用Process.kill()终止它。这会终止应用程序,但COM4仍然无法访问 有没有一种方法可以
有没有一种方法可以终止进程并以编程方式释放COM端口?终止进程不会给它一个清理的机会。如果客户端异常终止,COM端口很容易挂起
试试看。希望进程能够正常关闭并关闭COM端口来响应。但是,您必须给它一段时间来关闭它,这是您可以利用的。杀死一个进程并不会给它一个清理的机会。如果客户端异常终止,COM端口很容易挂起
试试看。希望进程能够正常关闭并关闭COM端口来响应。但是,您必须给它一些时间来关闭,您可以使用它。类实现
IDisposable
的原因正是:当端口变量超出范围时,清理非托管资源(如端口本身)
using (var serialPort = new SerialPort())
{
// Set the read/write timeouts
serialPort.ReadTimeout = 500;
serialPort.WriteTimeout = 500;
serialPort.Open();
// do something
}
当您杀死进程时,它不会总是被清除,但是这样,您就给了它一个战斗的机会。SerialPort类实现
IDisposable
正是因为这个原因:当端口变量超出范围时,清除非托管资源(如端口本身)
using (var serialPort = new SerialPort())
{
// Set the read/write timeouts
serialPort.ReadTimeout = 500;
serialPort.WriteTimeout = 500;
serialPort.Open();
// do something
}
当你杀死进程时,它不会总是被清理干净,但是这样,你给了它一个战斗的机会