当前位置: 代码迷 >> WinCE >> winCE5.0下串口程序无法接收数据!解决办法
  详细解决方案

winCE5.0下串口程序无法接收数据!解决办法

热度:18   发布时间:2016-04-28 13:20:34.0
winCE5.0下串口程序无法接收数据!,
winCE5.0下串口程序无法接收数据!,请高手帮忙!! SOS... 
下面是我在VS2005下用C#编写的,用在winCE5.0下的一个串口程序,在编译时出现了以下错误: 
——“System.Windows.Form.Form”并不包含“CheckForIllegalCrossThreadCalls”的定义——如果去掉这句话“Form.CheckForIllegalCrossThreadCalls = false;” 编译可以成功,可以发送字符串,但是不能接收,会出现这样的提示"Control.Invoke必须用于与在独立线程上创建的控件交互"!请问哪位高手可以帮一下我吗?实在没办法了!!!SOS。。。。。。 


using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
using System.IO.Ports; 
using System.Threading; 

namespace TestSerialPort 

  public partial class frmTESTSerialPort : Form 
  { 
  //实例化串口对象(默认:COM1,9600,e,8,1)  
  SerialPort myserialPort = new SerialPort(); 

  //串口控件初始化 
  public frmTESTSerialPort() 
  { 
  Form.CheckForIllegalCrossThreadCalls = false; 
  InitializeComponent(); 
  } 

  //窗口载入 
  private void frmTESTSerialPort_Load(object sender, EventArgs e) 
  { 
  //更改参数 
  myserialPort.PortName = "COM1 "; 
  myserialPort.BaudRate = 9600; 
  myserialPort.Parity = Parity.None; 
  myserialPort.DataBits = 8; 
  myserialPort.StopBits = StopBits.One; 
  myserialPort.ReadBufferSize = 4096; 
  //上述步骤可以用在实例化时调用SerialPort类的重载构造函数 
  //SerialPort serialPort = new SerialPort("COM1 ", 9600, Parity.None, StopBits.One);  
  } 

  //开启串口 
  private void button1_Click(object sender, EventArgs e) 
  { 
  //打开串口(打开串口后不能修改端口名,波特率等参数,修改参数要在串口关闭后修改)  
  if (myserialPort.IsOpen == false) 
  { 
  myserialPort.Open(); 
  MessageBox.Show("串口开启成功"); 
  } 
  } 

  //发送数据 
  private void button2_Click(object sender, EventArgs e) 
  { 
  //发送数据 
  SendStringData(myserialPort); 
  } 

  //发送字符串数据 
  private void SendStringData(SerialPort serialPort) 
  { 
  try 
  { 
  serialPort.Write(txtSend.Text); 
  } 
  catch 
  { 
  MessageBox.Show("请先打开串口"); 
  } 
  } 

  //发送二进制数据 
  private void SendBytesData(SerialPort serialPort) 
  { 
  byte[] bytesSend = System.Text.Encoding.Default.GetBytes(txtSend.Text); 
  serialPort.Write(bytesSend, 0, bytesSend.Length); 
  } 

  //接收\读取数据 
  public void button3_Click(object sender, EventArgs e) 
  { 
  //同步阻塞接收数据线程 
  Thread threadReceive = new Thread(new ThreadStart(SynReceiveData));//修改 
  threadReceive.Start(); 
  //也可用异步接收数据线程 
  相关解决方案