以编程方式自动通过C#基于串行设备获取正确的COM端口

道路管理员

我正在尝试设置程序以自动检测哪个COM端口连接到我的设备,为此,这是我到目前为止所做的:

我使用以下命令获取COM端口

string[] comPorts = SerialPort.GetPortNames();

一旦有了适用于我的PC的可用COM端口,就可以在foreach循环内创建一个SerialPort实例以打开,然后通过每个可用的COM端口发送字符串命令。将我的设备连接到这些COM端口之一后,它将使用另一个字符串命令进行响应,我通过SerialPort.DataReceived事件捕获了该命令。

foreach(string port in comPorts)
{
    SerialPort sp = new SerialPort(port, 9600, Parity.None, 8, StopBits.One);
    sp.Handshake = Handshake.None;

    sp.Open();
    sp.Write("<ID01>\r\n"); // this command wakes up the device.  The device then sends back the string "<ID01>S" in which 'S' is the code for Success.
}

这很好,我可以成功返回成功字符串。所有这些的原因是我希望程序自动识别设备是在哪个COM端口上设置的。问题在于,当DataReceived事件返回Success字符串时,该程序已经超过了它将对我有好处的地步,因为正在运行该程序的Main线程似乎已经在前进。我以为也许可以通过执行Thread.Sleep(10000)来暂停主线程;但是它似乎暂停了SerialPort。在主线程过去之后,SerialPort.DataReceived事件仍然传递回我的数据。

所以我的问题是:有没有办法暂停主线程以允许DataReceived信息传递回来,以便我可以根据设备是否已连接到该特定COM端口来处理代码?

如果不是,那么没有人对我可能如何做到这一点有任何建议吗?

道路管理员

颤音

您的问题是您使用的是异步读取方法,而实际上您需要一个同步读取方法。

这几乎做同样的事情,但都在一个线程上:

foreach(SerialPort port in SerialPort.GetPortNames())
{
    SerialPort sp = new SerialPort(port, 9600, Parity.None, 8, StopBits.One);
    sp.Handshake = Handshake.None;

    sp.Open();
    sp.Write("<ID01>\r\n");

    Thread.Sleep(250);  // give it some time to respond

    string response = sp.ReadExisting();
    if(response == "<ID01>S")
    {
        found = true;
        // do something useful
    }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过串行方式通过C#以编程方式自动获取正确的COM端口

来自分类Dev

C#-通过串行端口轮询设备

来自分类Dev

如何以编程方式更改串行COM端口号?

来自分类Dev

使用C#通过“ USB虚拟串行端口”与USB设备通信?

来自分类Dev

如何自动检测串行COM端口C#的连接

来自分类Dev

在C#中从串行端口设备读取数据

来自分类Dev

C#:如何获取当前PowerPoint幻灯片的名称/数字并通过串行端口发送?

来自分类Dev

如何通过c#以编程方式更改COM安全设置?

来自分类Dev

如何在Winform C#中获取Bluetooth Device Com串行端口?

来自分类Dev

通过C#中的串行端口发送SMS,但出现垃圾

来自分类Dev

如何使Windows服务从串行端口获取数据C#

来自分类Dev

如何通过HTML以编程方式获取设备的序列号?

来自分类Dev

C# - 如果不存在设备,则检测串行端口上的设备将挂起

来自分类Dev

Linux串行端口-wrtie()字节通过串行端口到达目标设备

来自分类Dev

NodeJS:通过在串行端口连接的GSM设备发送SMS

来自分类Dev

NodeJS:通过在串行端口连接的GSM设备发送SMS

来自分类Dev

C#串行端口读取HEX数据

来自分类Dev

等待来自C#串行端口的数据

来自分类Dev

以编程方式更改COM端口号

来自分类Dev

如何从IIS通过C#通过网站名称获取端口?

来自分类Dev

如何从IIS通过C#通过网站名称获取端口?

来自分类Dev

使用通过串行端口连接的C#的USB RFID阅读标签

来自分类Dev

使用MultiThreading C#通过串行端口向LOG屏幕读取和写入数据

来自分类Dev

如何以编程方式获取设备DPI?

来自分类Dev

C# 串行端口读取 - 获取不同长度的 COBS 编码消息

来自分类Dev

串行端口读取字节未获取正确的数据

来自分类Dev

C#报表以编程方式通过reportViewer传递参数

来自分类Dev

Linux串行端口编程c_cc字符配置

来自分类Dev

Java RXTX-通过串行通信检测正确的设备

Related 相关文章

  1. 1

    通过串行方式通过C#以编程方式自动获取正确的COM端口

  2. 2

    C#-通过串行端口轮询设备

  3. 3

    如何以编程方式更改串行COM端口号?

  4. 4

    使用C#通过“ USB虚拟串行端口”与USB设备通信?

  5. 5

    如何自动检测串行COM端口C#的连接

  6. 6

    在C#中从串行端口设备读取数据

  7. 7

    C#:如何获取当前PowerPoint幻灯片的名称/数字并通过串行端口发送?

  8. 8

    如何通过c#以编程方式更改COM安全设置?

  9. 9

    如何在Winform C#中获取Bluetooth Device Com串行端口?

  10. 10

    通过C#中的串行端口发送SMS,但出现垃圾

  11. 11

    如何使Windows服务从串行端口获取数据C#

  12. 12

    如何通过HTML以编程方式获取设备的序列号?

  13. 13

    C# - 如果不存在设备,则检测串行端口上的设备将挂起

  14. 14

    Linux串行端口-wrtie()字节通过串行端口到达目标设备

  15. 15

    NodeJS:通过在串行端口连接的GSM设备发送SMS

  16. 16

    NodeJS:通过在串行端口连接的GSM设备发送SMS

  17. 17

    C#串行端口读取HEX数据

  18. 18

    等待来自C#串行端口的数据

  19. 19

    以编程方式更改COM端口号

  20. 20

    如何从IIS通过C#通过网站名称获取端口?

  21. 21

    如何从IIS通过C#通过网站名称获取端口?

  22. 22

    使用通过串行端口连接的C#的USB RFID阅读标签

  23. 23

    使用MultiThreading C#通过串行端口向LOG屏幕读取和写入数据

  24. 24

    如何以编程方式获取设备DPI?

  25. 25

    C# 串行端口读取 - 获取不同长度的 COBS 编码消息

  26. 26

    串行端口读取字节未获取正确的数据

  27. 27

    C#报表以编程方式通过reportViewer传递参数

  28. 28

    Linux串行端口编程c_cc字符配置

  29. 29

    Java RXTX-通过串行通信检测正确的设备

热门标签

归档