1

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

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

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

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

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

4

2 回答 2

1

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

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

于 2013-04-12T04:24:53.337 回答
0

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

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

    serialPort.Open();

    // do something
}

当你终止进程时,它并不总是被清理干净,但这样,你就给了它一个战斗的机会。

于 2013-04-12T04:41:01.840 回答