首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

串口数据显示在textbox里有有关问题

2012-02-24 
串口数据显示在textbox里有问题我先把我的主要代码贴上来:privatevoidserialPort1_DataReceived(objectsen

串口数据显示在textbox里有问题
我先把我的主要代码贴上来:
  private   void   serialPort1_DataReceived(object   sender,   System.IO.Ports.SerialDataReceivedEventArgs   e)
                {  
                        byte[]lpBuffer=new   byte   [10];
                        uint[]   m_v   =   new   uint[5];      

                        serialPort1.Read(lpBuffer,   0,   10);
                        m_v[0]   =   Convert.ToUInt32((lpBuffer[0]   < <   4)   +   (lpBuffer[1]   &   0x0f));
                        m_v[1]   =   Convert.ToUInt32((lpBuffer[2]   < <   4)   +   (lpBuffer[3]   &   0x0f));
                        m_v[2]   =   Convert.ToUInt32((lpBuffer[4]   < <   4)   +   (lpBuffer[5]   &   0x0f));
                        m_v[3]   =   Convert.ToUInt32((lpBuffer[6]   < <   4)   +   (lpBuffer[7]   &   0x0f));
                        m_v[4]   =   Convert.ToUInt32((lpBuffer[8]   < <   4)   +   (lpBuffer[9]   &   0x0f));

                        m_vol[0]   =   Convert.ToSingle((float)(m_v[0])   *   5   /   4095);
                        m_vol[1]   =   Convert.ToSingle((float)(m_v[1])   *   5   /   4095);
                        m_vol[2]   =   Convert.ToSingle((float)(m_v[2])   *   5   /   4095);
                        m_vol[3]   =   Convert.ToSingle((float)(m_v[3])   *   5   /   4095);
                        m_vol[4]   =   Convert.ToSingle((float)(m_v[4])   *   5   /   4095);
this.Invoke(new   EventHandler(DoUpdate));
}
private   void   DoUpdate(object   s,   EventArgs   e)
                {                                              
                        Cur_R.Text   =   m_vol[0].ToString();
                      Cur_X.Text   =   m_vol[1].ToString();
                        Cur_G.Text   =   m_vol[2].ToString();
                        Cur_B.Text   =   m_vol[3].ToString();
                        Cur_Phase.Text   =   m_vol[4].ToString();      


                       
                }    
现在的问题是:只有       Cur_R,   Cur_X,   Cur_G有数据,另外两个没有数据显示。但是,当我移动鼠标的时候,就会有数据显示出来,如果用MessageBox来显示m_vol[3],m_vol[4]的话,显示出来的数值是正确的。这个问题困扰了我好久,各位大虾,帮帮忙,看看到底是什么原因。      


[解决办法]
单步调试到Cur_G, Cur_B处看看能否取到值
或者将这两个文本框删掉重新加入一次
[解决办法]
我估计你Cur_B.Text = m_vol[3].ToString();
Cur_Phase.Text = m_vol[4].ToString();
的时候,m_vol[3]\m_vol[4]还没有值,否则不可能不显示,这里面也没有复杂的处理,你把 byte[]lpBuffer的长度增大一点试一下;
而且你说移动鼠标的时候就显示了也挺怪,你其他地方还有活动的线程没?
[解决办法]
确实比较奇怪...

try..

this.BeginInvoke(new EventHandler(DoUpdate));

(其实和用Invoke差别不大)..

[解决办法]
或者再加上这么一句..


this.BeginInvoke(new EventHandler(DoUpdate));
Application.DoEvents();

试试,我也不肯定...

[解决办法]
试试这样看有没有值
Cur_G.Text = m_vol[2].ToString()+ " "+m_vol[3].ToString()+ " "+m_vol[4].ToString();

这样的目的是看看,这个时候m_vol[3].ToString()和m_vol[4].ToString()有没有值,
如果有的话,就是那两个文本框问题。
如果没有的话,就太齐怪了。

又看了一下,估计是你这几个文本框定义的不一样。

热点排行