Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#/GTK#串行端口读取问题_C#_Gtk# - Fatal编程技术网

C#/GTK#串行端口读取问题

C#/GTK#串行端口读取问题,c#,gtk#,C#,Gtk#,所以我试图从C#/Gtk中的串行端口对象读取实时数据。我有一个产品,它通过射频与计算机对话,每次收到命令时,它都会发回一个ACK。如果我使用AccessPort并每隔500毫秒自动发送一个命令,我就会收到ACK。我已经运行了几个小时的AccessPort,并且能够将每个命令与ACK匹配,所以我知道这在实际工作中 我用C#/Gtk#编写了一个小程序,它以X ms的速度将数据发送到串行端口,并有一个委托线程读取串行端口返回的任何字节。我的问题是,无论我如何编写串行读取的方法,它都不会捕获我知道的所有

所以我试图从C#/Gtk中的串行端口对象读取实时数据。我有一个产品,它通过射频与计算机对话,每次收到命令时,它都会发回一个ACK。如果我使用AccessPort并每隔500毫秒自动发送一个命令,我就会收到ACK。我已经运行了几个小时的AccessPort,并且能够将每个命令与ACK匹配,所以我知道这在实际工作中

我用C#/Gtk#编写了一个小程序,它以X ms的速度将数据发送到串行端口,并有一个委托线程读取串行端口返回的任何字节。我的问题是,无论我如何编写串行读取的方法,它都不会捕获我知道的所有字节

到目前为止,这是我掌握的“最轻”的代码:

    private void readSerial(){
    byte readByte = 0x00;

    Gtk.Application.Invoke (delegate {
        try {
            readByte = (byte)serialPort.ReadByte();
            Console.WriteLine(readByte.ToString("X2"));
        } catch (System.ArgumentException sae) {
            Console.WriteLine(sae.Message);
        }
    });
}
我已将该方法分配给主函数中的线程:

    writeThread = new Thread (writeSerial);
    readThread = new Thread (readSerial);
当按下连接按钮时,我就会启动它,同时还有writeThread。writeThread工作正常,因为我可以看到产品每X毫秒执行一次正确的指令(目前我正在以500毫秒的速度进行测试)。ACK应每隔X ms+35 ms*模块ID到达计算机,因此,如果我的最终产品的模块ID为2,响应将延迟70 ms,因此计算机应在570 ms或X+70 ms时看到它

有更好的方法吗?我做了些愚蠢的错事

我玩过的其他一些代码是从串行端口读取0x0E字节并将字节存储到缓冲区,这也丢失了很多我知道会返回的字节

有人能帮忙吗?我知道readSerial方法实际上正在启动,因为我确实看到控制台上弹出一个0x00,这是正确的,因为0x00分散在我要查找的数据中

找到了


我不确定确切的问题是什么,但当我删除委派并只是使用了一段时间(正确)查看该方法时,它工作得很好。

如果您还捕获并记录其他异常,会发生什么?好主意!如果我添加一个catch(System.Exception se)并执行一个Console.WriteLine(se.Message),我仍然看不到任何东西,但这是一个好主意!我还尝试将ReadByte()替换为ReadExisting(),然后将字符串转换为字节数组并打印,但没有成功。