我先把我的主要代码贴上来:
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]的话,显示出来的数值是正确的。这个问题困扰了我好久,各位大虾,帮帮忙,看看到底是什么原因。
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]的话,显示出来的数值是正确的。这个问题困扰了我好久,各位大虾,帮帮忙,看看到底是什么原因。
解决方案 »
- ComponentOne Studio.NET 3.0 里的C1DataGrid有人用过吗?(问题很难)
- 请教一下SQLDATAREADER的问题
- Winform的DataGridView中添加两个RadioButton
- 我想实现当textboxi(i是标号)的内容为空时,警告相应的labeli的内容不能为空,可总是有错误,希望高手给看看,谢谢了!
- httphanlder类中使用Server.Transfer定向到另外一个页面的错误,200分问题。
- Soap压缩(分不够再加)
- 请教一个关于创建控件的事件的问题
- 各位高手请帮帮忙一个很简单的问题!
- 用C#写的程序出现outofmemory错误,知道如何解决么?
- 如何在Visual c#中截取屏幕图片
- 急求高人答案:一则正则表达式的解
- C#像C++中的waitformultobject一样的多线程等待是哪个类实现的?>
或者将这两个文本框删掉重新加入一次
Cur_Phase.Text = m_vol[4].ToString();
的时候,m_vol[3]\m_vol[4]还没有值,否则不可能不显示,这里面也没有复杂的处理,你把 byte[]lpBuffer的长度增大一点试一下;
而且你说移动鼠标的时候就显示了也挺怪,你其他地方还有活动的线程没?
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()有没有值,
如果有的话,就是那两个文本框问题。
如果没有的话,就太齐怪了。又看了一下,估计是你这几个文本框定义的不一样。