| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3516 人关注过本帖
标题:C# 智能设备串口应用开发中遇到的关于DataReceived事件委托的问题,请帮忙分 ...
只看楼主 加入收藏
wzg_soullon
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-1-9
结帖率:100%
收藏
 问题点数:0 回复次数:2 
C# 智能设备串口应用开发中遇到的关于DataReceived事件委托的问题,请帮忙分析一下原因
我使用VS2005 开发基于wince 5.0的串口应用程序,在打开串口时使用如下设置:
                m_serialPort.ReadBufferSize = 1024;
                m_serialPort.PortName = "COM3";
                m_serialPort.BaudRate = 57600;
                m_serialPort.Parity =
                m_serialPort.DataBits = 8;
                m_serialPort.StopBits =
                m_serialPort.ReadTimeout = 10;
                m_serialPort.ReceivedBytesThreshold = 1;  //事件触发频率,每收到1个字节长度数据即出发接收事件
                m_serialPort.DataReceived += new SerialDataReceivedEventHandler(m_serialPort_DataReceived);  //绑定接收事件函数
如果从其他设备向此终端模拟发送数据,没隔1秒发送一次,终端每隔5、6秒才收到一串数据。
但是,经过反复尝试,将串口设置改成(多重复几次设定事件处理函数委托):
              m_serialPort.ReadBufferSize = 1024;
                m_serialPort.PortName = "COM3";
                m_serialPort.BaudRate = 57600;
                m_serialPort.Parity =
                m_serialPort.DataBits = 8;
                m_serialPort.StopBits =
                m_serialPort.ReadTimeout = 10;
                m_serialPort.ReceivedBytesThreshold = 1;  //事件触发频率,每收到1个字节长度数据即出发接收事件
                m_serialPort.DataReceived += new SerialDataReceivedEventHandler(m_serialPort_DataReceived);  //绑定接收事件函数
                m_serialPort.DataReceived += new SerialDataReceivedEventHandler(m_serialPort_DataReceived);  //绑定接收事件函数
                m_serialPort.DataReceived += new SerialDataReceivedEventHandler(m_serialPort_DataReceived);  //绑定接收事件函数
                m_serialPort.DataReceived += new SerialDataReceivedEventHandler(m_serialPort_DataReceived);  //绑定接收事件函数

事件处理函数如下:
public void m_serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
        
            try
            {
                if (m_serialPort.Read(readBuff, m_nReadBytes, 1) == 1)
                {
                    if (readBuff[m_nReadBytes] == 0x02)
                    {
                        m_nReadBytes = 0;
                    }
                    m_nReadBytes++;
                    if (readBuff[m_nReadBytes - 1] == 0x03)
                    {
                        Marshal.Copy(readBuff, 0, hglobal, m_nReadBytes); // System.Runtime.InteropServices.把你的数据从byte[]复制到这段内存空间
   
                        Message msg = Message.Create(m_msgWnd.Hwnd, MsgWindow.WM_RECVDATA, hglobal, (IntPtr)m_nReadBytes);
                        MessageWindow.PostMessage (ref msg);
                        m_nReadBytes = 0;
                    }
                }
            }
            catch (Exception ee)        
            {
                //如果读取超时,可能会出发此异常
            }  
        }
串口接收就正常了。小弟刚开始接触C#,请高手指点一下,这是什么原因?


[ 本帖最后由 wzg_soullon 于 2010-1-9 12:46 编辑 ]
搜索更多相关主题的帖子: 委托 设备 智能 DataReceived 串口 
2010-01-09 12:45
kwame
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-1-11
收藏
得分:0 
你好,可以MSN上聊吗?
pc_155#
我也遇到和你一样的问题。
2010-01-11 10:29
wzg_soullon
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-1-9
收藏
得分:0 
从网上搜索,好像是serialport存在bug,也不知是真是假,反正就是不能正常接收。后来直接开一个线程,专门辅助数据读取就可以了。
2010-01-21 17:25
快速回复:C# 智能设备串口应用开发中遇到的关于DataReceived事件委托的问题,请 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019404 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved