14

直到现在我需要发送数据时打开,然后立即关闭。我收到随机的“访问端口”错误(尽管我总是在使用端口后关闭它),所以我想也许让它始终保持打开状态。

假设每分钟或两分钟我需要在某些 COM 端口中发送数据,那么正确的使用方法是什么?

谢谢..

4

3 回答 3

11

频繁调用 SerialPort.Close() 是一个错误。让另一个应用程序窃取您的端口并不是非常可取的。但更成问题的问题是,您遇到的问题是 Close() 不会等待由 SerialPort 启动的工作线程退出。该工作线程引发 DataReceived、PinChanged 和 ErrorReceived 事件。它需要“一段时间”才能退出,可能在几毫秒和几秒之间。再次调用 Open() 将失败,直到完成为止。

这是类中的一个缺陷,但由串行端口的常见用法引起。在应用程序终止之前,应用程序通常不会关闭它们。包括从不,避免常见的死锁情况。请注意,有关 Close 的MSDN 文章对此提出了警告:

任何应用程序的最佳做法是在调用 Close 方法后等待一段时间,然后再尝试调用 Open 方法,因为端口可能不会立即关闭。

于 2013-05-27T17:12:15.530 回答
2

如果您担心打开/关闭和其他应用程序窃取 COM 端口,您可以使用 Microsoft 用于嵌入式 Windows 中的 GPS 中间驱动程序的方法,即编写一个聚合器,打开端口,保留它打开,然后为其他应用程序连接提供连接点。

如何创建连接取决于您:您可以深入硬件并编写一个可共享的虚拟 com 端口驱动程序,或者您可以像我一样编写一个简单的 win32 套接字服务,允许客户端程序通过常规的 Windows 套接字连接。

也许不是一个直截了当的答案,但值得深思。

于 2013-05-27T19:02:58.480 回答
1

让串行端口保持打开状态几乎没有什么危害,所以是的,保持打开状态。它为您节省了打开/关闭它的开销。

于 2013-05-27T17:05:05.423 回答