private void openports_Click(object sender, EventArgs e)
        {
            string theport = ports.Text.Trim();
            if (port_validate(theport))
            {
                sp = new SerialPort(theport);
                if (cbBaultRate.Text.Trim() != "")
                {
                    sp.BaudRate = Convert.ToInt32(cbBaultRate.Text);
                }
                if (!sp.IsOpen)
                {
                    sp.Open();
                    MessageBox.Show("称重串口打开");
                    openports.Enabled = false;
                }
            }
            else
            {
                MessageBox.Show("串口选择错误");
                return;
            }            if (sp.IsOpen)
            {
                status.Text = "状态:打开正常";
            }
            else
            {
                status.Text = "状态:打开异常";
            }        }

解决方案 »

  1.   

    谢谢版主回复:1.串口是否良好,包括数据线等是否接的正确:这个是正确的,用自带的称重软件可以正常显示.2.代码里是否打开串口:显示打开串口成功3.串口参数设置是否正确:串口参数波特率设的是9600,4.事件是否绑定到了串口组件 :已经绑定了  this.sp.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.sp_DataReceived);,参数设置还需要设置其他的吗
      

  2.   

    谢谢happy09li,波特率是9600,说明书上是不需要发送指令才能获取数据的
      

  3.   

    从 SerialPort 对象接收数据时,将在辅助线程上引发 DataReceived 事件。由于此事件在辅助线程而非主线程上引发,因此尝试修改主线程中的一些元素(如 UI 元素)时会引发线程异常。如果有必要修改主 Form 或 Control 中的元素,请使用 Invoke 回发更改请求,这将在正确的线程上执行。// 试试在 DataReceived 添加诊断信息。