Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 终止进程后释放COM端口_C#_Serial Port - Fatal编程技术网

C# 终止进程后释放COM端口

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仍然无法访问 有没有一种方法可以

我有一个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
}
当你杀死进程时,它不会总是被清理干净,但是这样,你给了它一个战斗的机会