串口串口通信 线程-C# 串口接收数据处理线程遇到的问题求高手帮助!

问题描述

C# 串口接收数据处理线程遇到的问题求高手帮助!

C# 串口接收数据处理时遇到队列有值,但报错InvalidOperationException,队列为空的问题。
代码如下:private void dataProcessing()
{
byte[] data = new byte[2] {0,0};
float sensor_data = 0f;//用来记录转化后的数据
//float data_high8 = 0f;

        int timerDraw=0;
        while (true)
        {
            if (dataQueue.Count >=2)//dataQueue中数据长度大于2时,进行数据处理
            {
                lock (dataQueue)
                {
                     **data[1] = (byte)dataQueue.Dequeue();**   在此处出现未处理InvalidOperationException   队列为空的问题
                    //data_high8 = data[1];
                    if ((data [1] &240) != 0)//如果高四位不是0,说明数据有误
                    {
                        MessageBox.Show("数据错误!!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        break;
                    }
                    data[0] = (byte)dataQueue.Dequeue();
                    sensor_data = BitConverter.ToInt16  (data, 0)*3.3f/4096f ;
                    switch (timerDraw)
                    {
                        case 0: timerDraw++; addToList(sensor_data, list1, List1); break;
                        case 1: timerDraw++; addToList(sensor_data, list2, List2); break;
                        case 2: timerDraw++; addToList(sensor_data, list3, List3); break;
                        case 3: timerDraw++; addToList(sensor_data, list4, List4); break;
                        case 4: timerDraw = 0; addToList(sensor_data, list5, List5);
                               if (List5 .Count /2==maxCount )//已接收完数据
                               {
                                   stopTraining();
                               }
                            break;
                    }
                }
            }
        }
    }

非常感谢!!

解决方案

此问题我已解决,是之前暂停时,未关闭线程。

时间: 2024-11-04 17:08:21

串口串口通信 线程-C# 串口接收数据处理线程遇到的问题求高手帮助!的相关文章

串口通信-有关线程收发串口数据的问题

问题描述 有关线程收发串口数据的问题 最近写一个项目里面用到的是基于串口通信的. 由于我需要一直处于接收数据状态,并且可以随时发送数据(我的串口是RS232,支持全双工),于是想到了用两个线程去做. 一个处于收状态,一个发包用. 现在的问题是:我只有一个SerialPort对象 ,通过跨类的信号和槽得到这个对象,但是一放在线程的run函数读写就会报错. 我曾想过把串口的设置和连接放在线程类里面做,但是我这边两个线程呢,一个链接的话,端口就会被占用,另外一个线程就没法连接 困了一天了 不知道该怎么

串口通信-android蓝牙串口接收数据

问题描述 android蓝牙串口接收数据 最近在做android手机蓝牙和单片机通信,一直被接收数据完整性这个问题困扰. 为了使一次通信的包保持完整,我就构思了发送12位的包,包头(1)+数据(8)+校验(2)+包尾(1),校验为求和校验.单片机发送数据的函数如下 void SendString(uchar *dat) //发送12位的包 包头(1)+数据(8)+校验(2)+包尾(1) { uchar i,j; uint check=0; //求和校验 SendChar(0x01); //0x0

串口-VS2010下MFC CSerialport类接收问题

问题描述 VS2010下MFC CSerialport类接收问题 在VS2010的MFC下,用CSerialPort类时遇到下位机发送命令后上位机接收不到(下位机发BBBB),但是用串口精灵可以收到,我采用的是龚建伟老师介绍的加消息响应方法接收,是收到一次处理一次,不知道为什么会这样,怎么解决?网上有说是存到缓存从缓存处理,窝子安在这种情况怎么更改呢?希望有系统的解决思路或方法,非常感谢! 解决方案 串口精灵可以收到,只能说明你的代码有问题.贴代码出来分析吧! 或者,自己分析:但所有用到的系统函

C#结合串口通信类实现串口通信源代码

mycom是串口通信类.下面是串口通讯测试程序的源代码,将mycom类放在此项目中,可以实现简单的串口通信,希望读者能通过这个程序对串口通信过程有一个初步的了解: using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Threading; namesp

串口通讯-Linux下多线程串口通信问题

问题描述 Linux下多线程串口通信问题 我做的一个项目,把串口读写采用了一个独立的线程,进行数据的读写,在调试时,发现只要启动另外一个计算量比较大的线程,串口通信就出错了,而只要不启动这个线程,可以启动其他线程,串口工作没有任何问题,求原因? 解决方案 在C#中使用SerialPort类实现串口通信,多线程问题在C#中使用SerialPort类实现串口通信 遇到多线程问题在C#中使用SerialPort类实现串口通信 遇到多线程问题 解决方案二: 这两个线程有耦合吧?认真分析一下之间的联系.可

单片机-蓝牙串口问题,手机数据不接收

问题描述 蓝牙串口问题,手机数据不接收 我用的是51单片机上的教程 输入 字符X 会显示 I GET X. 然后我用单片机和电脑相连 输入1 串口助手会显示i get 1 . 我再用蓝牙模块直接和电脑相连 手机连接蓝牙,手机输入1串口助手显示1.证明手机发数据蓝牙能接收. 我再将单片机和蓝牙模块相连,手机连上蓝牙,手机输入1,电脑串口助手没反应,求解这是什么问题呀! 谢谢大家!STC89C52 #include #define uchar unsigned char #define uint u

VC 控制台程序串口通讯,串口收到数据如何发送消息给主线程?

问题描述 VC 控制台程序串口通讯,串口收到数据如何发送消息给主线程? 用CSerialPort类实现串口通讯,该类在收到数据后会调用::sendmessage函数,该函数的第一个参数是窗口句柄,但是控制台没有窗口句柄,该怎么发送消息?main函数里怎么响应消息? 解决方案 sendmessage wm_copydata 解决方案二: 控制台程序可以调用http://blog.csdn.net/coredoor/article/details/8582001

请问各位大神,在c#串口通讯中,怎么把接收到的数据保存在Excel表格中?

问题描述 请问各位大神,在c#串口通讯中,怎么把接收到的数据保存在Excel表格中? 本人最近做一个项目时需要把串口接收到的数据进行分析,数据量较大,比如5秒钟保存一次,连续工作一天,本人刚接触c#,串口通讯协议已写好,现在的问题是怎么把数据保存在Excel表格中以便分析?各位大神有没有用C#做过项目,求指教,最好有源代码!本人刚进论坛,没分,如果满意的话以后再补给你!!!!!!!!!急!!!!!! 解决方案 C#操作Excel(创建.打开.读写.保存)几种方法的总结 C#基于微软EXCEL类库

串口指令和数据-串口发送多条指令和接收到的多条数据怎么对应?(接收到的数据长度一样,功能码也一样)

问题描述 串口发送多条指令和接收到的多条数据怎么对应?(接收到的数据长度一样,功能码也一样) 串口发送多条指令和接收到的多条数据怎么对应?(接收到的数据长度一样,功能码也一样) 解决方案 自己定义一个协议,用唯一的id或者时间戳表示. 解决方案二: 带个标识,用来识别消息号