在阅读C# 与VB.NET 网络通信开发实战 一书中,出现一点问题!想做一个单机串口通信的小型程序,可是提示错误 1 “DataReceived”的重载均与委托“System.IO.Ports.SerialDataReceivedEventHandler”不匹配 C:\Documents and Settings\Administrator\桌面\4.8\SerialPort Communition\WindowsFormsApplication1\Form1.cs 26 40 WindowsFormsApplication1
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private SerialPort serialPort = new SerialPort();
        public Form1()
        {
            
            InitializeComponent();
                   }        private void Form1_Load(object sender, EventArgs e)
        {
            //下行有问题
            serialPort.DataReceived += new System.IO .Ports .SerialDataReceivedEventHandler(DataReceived);            string[] portNames = System.IO.Ports.SerialPort.GetPortNames();
            for (int i = 0; i < portNames.Length - 1; i++)
            {
                comboBox1.Items.Add(portNames [i]);
            }
            button2.Enabled = false;
        }        private void button1_Click(object sender, EventArgs e)
        {
            if (serialPort.IsOpen)
            {
                serialPort.Close();
            }
            try
            {
                serialPort.PortName = comboBox1.Text;
                serialPort.BaudRate = 9600;
                serialPort.Parity = System.IO.Ports.Parity.None;
                serialPort.DataBits = 8;
                serialPort.StopBits = System.IO.Ports.StopBits.One;                serialPort.Open();                label2.Text = comboBox1.Text + "connect";
                button1.Enabled = false;
                button2.Enabled = true;
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.ToString ());
            }        }        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                serialPort.Close();
                label2.Text = serialPort.PortName + " disconnected";
                button1.Enabled = true;
                button2.Enabled = false;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString ());
            }
        }                private void button3_Click(object sender, EventArgs e)
        {
            try
            {
                serialPort.Write(txtDataToSend.Text + Environment.NewLine);
                txtDataReceived.AppendText(">" + txtDataToSend.Text + Environment.NewLine);
                txtDataReceived.ScrollToCaret();
                txtDataToSend.Text = string.Empty;
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.ToString ());
            }
        }        private void DataReceived(System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            txtDataReceived.BeginInvoke(new myDelegate (updateTextBox));
        }        public delegate void myDelegate();
        public void updateTextBox()
        {
            txtDataReceived.AppendText(serialPort .ReadExisting());
            txtDataReceived.ScrollToCaret();
        }           }
}

解决方案 »

  1.   

    看看MSDN帮助吧,SerialDataReceivedEventHandler正确的格式如下:public delegate void SerialDataReceivedEventHandler(
    Object sender,
    SerialDataReceivedEventArgs e
    )将 private void DataReceived(System.IO.Ports.SerialDataReceivedEventArgs e)
            {
                txtDataReceived.BeginInvoke(new myDelegate (updateTextBox));
            } 
    修改为
    private void DataReceived(object sender,System.IO.Ports.SerialDataReceivedEventArgs e)
            {
                txtDataReceived.BeginInvoke(new myDelegate (updateTextBox));
            } 
    即可。