解决方案 »
- 怎么根据不同的的内容,给字体或者行不同的颜色?
- 请教高手!!!急
- 如何让光标总是能够直接在TextBox里显示出来?
- 如何用C#实现datagridview的多行列头?
- 我已把textBox和listBox绑定在dataset,如果要listBox和textBox(数据显示同步)关联起来,怎么做?
- 怎么能实现显示结果?
- 小弟远程重启计算机有问题,求救各位大虾
- 为什么OleDbCommand 里的SQL语句,不能含有LIMIT?
- 请问如何获得 numlock capslock insert 状态?
- 伪IP怎么实现?
- HashTable里面装的是对象 该如何遍历
- 【求助】关于socket的问题~!求大家帮我下
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
Thread readThread = new Thread(Read);
readThread.Priority = ThreadPriority.Highest;
readThread.Start();
}
public void Read()
{
try
{
this.Invoke(new EventHandler(Read1));
}
catch { ;} }
public void Read1(Object sender, EventArgs e)
{
int iLEN=serialPort1.BytesToRead;
byte[] b_read = new byte[iLEN];
serialPort1.Read(b_read, 0, iLEN);
resultByte.AddRange(b_read);
serialPort1.DiscardInBuffer();
if (iLEN > 0)
{
if (iLEN == 1 && b_read[0] == '\xE5')
{
serialPort1.DiscardOutBuffer();
serialPort1.DiscardInBuffer();
serialPort1.Write(PubClass.Byte_con(1), 0, PubClass.Byte_con(1).Length);
resultByte.Clear();
Thread.Sleep(80);
}
else if (resultByte.Count > 20 && resultByte[resultByte.Count - 1] == '\x16')
{
iReadCount++;
resultByte.Clear();
if (iReadCount < 11)
{
PubClass.GetLotNum(serialPort1);
}
}
else
{
}
} }
和你说了,你的代码写的是有问题的MSDN:从 SerialPort 对象接收数据时,将在辅助线程上引发 DataReceived 事件。由于此事件在辅助线程而非主线程上引发,因此尝试修改主线程中的一些元素(如 UI 元素)时会引发线程异常。如果有必要修改主 Form 或 Control 中的元素,必须使用 Invoke 回发更改请求,这将在正确的线程上执行.进而要想将辅助线程中所读到的数据显示到主线程的Form控件上时,只有通过Invoke方法来实现