SerialDataReceivedEventHandler;

时间:2011-08-27 10:29:51

标签: c#

while (true)
{
 serialPort1.DataReceived += new SerialDataReceivedEventHandler(port1_DataReceived);
 }
private void port1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
  Thread.Sleep(1);
  byte DATA = Convert.ToByte(serialPort1.ReadByte());
  Console.WriteLine(DATA);
  //MessageBox.Show(Convert.ToString(DATA));
}

我可以在控制台上看到串行数据,但我不知道如何处理这个数据并在textBox等上显示它​​。 我的代码中缺少什么

2 个答案:

答案 0 :(得分:2)

除了@adatapost回答:

拳:

 while(true)
 {
   serialPort1.DataReceived += new SerialDataReceivedEventHandler(port1_DataReceived);
 } ???!!

希望这只是错误的复制/粘贴,导致在无限while循环中订阅事件!

第二:目前还不清楚你想在屏幕上看到

如果只是符号,第一个答案是非常合适的,如果不是,你应该阅读你的设备文档(打印机,账单计数器,RFID阅读器等等)知道如何处理这些字节。

希望这有帮助。

答案 1 :(得分:0)

使用Convert.ToBase64String()方法。此方法将字节数组转换为Base64字符串。

编辑:

@Muhammad Ashraf:问题不在于字节DATA,问题在于线程处理。

是这是跨线程问题。您可以使用Invoke方法。

private void port1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
  Thread.Sleep(1);
  byte DATA = Convert.ToByte(serialPort1.ReadByte());
  String data=Convert.ToString(DATA);

  if (textBox1.InvokeRequired)
   {
     textBox1.Invoke(new Action(() => { textBox1.Text = data; }));
   }
}