使用COM端口 - 每次使用后关闭,还是始终打开?

时间:2013-05-27 16:57:20

标签: c# serial-port

直到我需要发送数据时才打开,并立即关闭。 我得到随机的“访问端口”错误(虽然我使用它后总是关闭端口), 所以我想也许永远保持开放。

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

谢谢..

3 个答案:

答案 0 :(得分:10)

经常调用SerialPort.Close()是一个错误。让另一个应用程序偷走远离你的端口并不是非常理想。但是问题更多,而你遇到的问题是,Close()不会等待由SerialPort启动的工作线程退出。该工作线程引发DataReceived,PinChanged和ErrorReceived事件。退出需要“一段时间”,可能在几毫秒到几秒之间。再次调用Open()将失败,直到完成。

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

  

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

答案 1 :(得分:1)

将串口打开是非常有害的,所以是的,保持打开状态。它可以节省您打开/关闭它的开销。

答案 2 :(得分:1)

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

如何创建连接取决于您,您可以深入了解硬件并编写可共享的虚拟COM端口驱动程序,或者您可以执行我所做的操作并编写一个简单的win 32套接字服务然后允许客户端程序通过常规的Windows套接字连接进行连接。

也许不是一个简单的直接回答,但绝对值得深思。