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

C# 使用COM端口-每次使用后关闭,还是保持始终打开?,c#,serial-port,C#,Serial Port,到目前为止,我在需要发送数据时打开,然后立即关闭。 我会出现随机的“访问端口”错误(尽管我总是在使用端口后关闭端口), 所以我在想也许让它一直开着 假设每隔一两分钟我就需要在某些COM端口中发送数据,那么正确的使用方法是什么 谢谢。让串行端口保持打开状态几乎没有什么害处,所以,是的,让它保持打开状态。它节省了打开/关闭它的开销。频繁调用SerialPort.Close()是一个错误。让另一个应用程序偷走你的端口并不是很理想。但更大的问题是,Close()不会等待SerialPort启动的工作线程

到目前为止,我在需要发送数据时打开,然后立即关闭。 我会出现随机的“访问端口”错误(尽管我总是在使用端口后关闭端口), 所以我在想也许让它一直开着

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


谢谢。

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

频繁调用SerialPort.Close()是一个错误。让另一个应用程序偷走你的端口并不是很理想。但更大的问题是,Close()不会等待SerialPort启动的工作线程退出。该工作线程引发DataReceived、Pinchhanged和ErrorReceived事件。它需要“一段时间”才能退出,可能在毫秒到秒之间。在完成之前,再次调用Open()将失败

这是类中的一个缺陷,但由串行端口的常见用法引起。在应用程序终止之前,应用程序通常不会关闭它们。包括从不,避免常见的死锁场景。请注意,for Close警告如下:

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


如果您担心打开/关闭和其他应用程序窃取COM端口,您可以使用Microsoft在windows embedded中用于GPS中间驱动程序的方法,即编写聚合器,该聚合器打开端口,保持其打开,然后为其他应用程序提供连接点

如何创建连接取决于您:您可以深入了解硬件,编写一个可共享的虚拟com端口驱动程序,也可以像我一样编写一个简单的win32 socket服务,允许客户端程序通过常规windows socket连接进行连接


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

谢谢。我知道这个延迟,但在使用我的应用程序时,每次关闭和打开之间至少有30秒,所以我不认为这可能是随机锁的原因。我会让港口保持开放。谢谢,谢谢。我会让它打开。谢谢你的回答,但我在使用COM端口时不需要/不希望其他应用程序使用COM端口,所以我会让它一直打开。没关系,我的回答是作为“进一步思考”的方式发布的。:-)