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 串口程序2
{
    public partial class Form1 : Form
    {
      //int i;
        SerialPort sp=null;     //define new 类  serialPort是字段但当做类型被使用
            bool IsOpen = false;
            bool isSetProperty=false;                        public Form1()
        {
            InitializeComponent();
            
        }        private void Form1_Load(object sender, EventArgs e)
        { //set forms
            this.MaximumSize = this.Size;
            this.MinimumSize = this.Size;
            this.MaximizeBox = false;            int i;
            
            //set coms
            for(i=0;i<256;i++)
            {
                cbxCOMPort.Items.Add ("COM " + (i + 1).ToString());             }
            cbxCOMPort.SelectedIndex = 3;
            //set BaudRate
            cbxBaudRate.Items.Add("9600");
            cbxBaudRate.Items.Add("19200");
            cbxBaudRate.Items.Add("38400");
            cbxBaudRate.SelectedIndex = 0;
            //set Data
            cbxData.Items.Add("8");
            cbxData.Items.Add("7");
            cbxData.Items.Add("6");
            cbxData.Items.Add("5");
            cbxData.SelectedIndex = 0;
            //set Parity
            cbxParity.Items.Add("无");
            cbxParity.Items.Add("奇");
            cbxParity.Items.Add("偶");
            cbxParity.SelectedIndex = 0;
            //set StopBit
            //cbxStopBit.Items.Add("0");
            cbxStopBit.Items.Add("1");            cbxStopBit.Items.Add("1.5");
            cbxStopBit.Items.Add("2");
            cbxStopBit.SelectedIndex=0;        }        private void btnCheckCOM_Click(object sender, EventArgs e)//Dontnot familar
        {
            int i;
            cbxCOMPort.Items.Clear();
            for (i = 0; i <= 256; i++)
   这边可以  {
检测到COM4            try
                {
                    SerialPort sp = new SerialPort("COM" + (i + 1).ToString());
                    sp.Open();
                    sp.Close();
                    cbxCOMPort.Items.Add("COM" + (i + 1).ToString());                }
                catch (Exception)
                {
                    lblStatus.Text="COM"+(i+1).ToString()+"不可用";
                    continue;                 }             }        }
        private bool CheckPortSetting()
        {
            if (cbxCOMPort.Text.Trim() =="") return false;//Trim后如果没有()出现错误,Trim是一个方法组无法为它赋值
            if (cbxBaudRate.Text.Trim() == "") return false; 
            if (cbxParity.Text.Trim() == "") return false;
            if (cbxData.Text.Trim() == "") return false;
            if (cbxStopBit.Text.Trim() == "") return false;
            return true;
                 
         }
        private bool CheckSendData()
        {            if (txtSend.Text.Trim() == "") return false;
            return true;
         }
        private void  SetPortProperty()
      
        {
            //set the serialport's property
         SerialPort sp = new SerialPort();
            sp.PortName =Convert.ToString(cbxCOMPort.Text.Trim());
         
            sp.BaudRate = Convert.ToInt32(cbxBaudRate.Text.Trim());
            float f = Convert.ToSingle(cbxStopBit.Text.Trim());           // if (f == 0)
           // {
              //  sp.StopBits =StopBits.None;            // }
             if (f == 1)
            { sp.StopBits = StopBits.One; }
            else if(f==1.5)
            {sp.StopBits = StopBits.OnePointFive; }
            else 
            {sp.StopBits=StopBits.Two;}
            //set data
            sp.DataBits = Convert.ToInt16(cbxData.Text.Trim());
            //set parity
            string s=cbxParity.Text.Trim();
            if (s.CompareTo("无")==0)
            {sp.Parity=Parity.None; }
            else if(s.CompareTo("奇校验")==0)
            {sp.Parity=Parity.Odd;}
            else
            {sp.Parity=Parity.Even;}
            //设置超时读取时间,这个不太明白
            sp.ReadTimeout=-1;
            try
            {
 这边老是      sp.Close();
出现异常       sp.Open();
              IsOpen = true;
             }
           catch(Exception)
             {
               lblStatus.Text="打开串口时发生错误";
             }
                     }
            private void btnSend_Click(object sender, EventArgs e)
        {
            if (!CheckPortSetting())
            {
                MessageBox.Show("串口未设置!","错误提示");
                return;
             }
            if (!CheckSendData())
            {
                MessageBox.Show("请输入要发送的数据!", "错误提示");
                return;
             }
            if (!isSetProperty)
            {
                SetPortProperty();
                // isSetPortProperty();                isSetProperty = true;
             }
            if (IsOpen)
            {
                try
                {
                    sp.WriteLine(txtSend.Text);//这里也有问题,会直接跳到异常处理                }
                catch (Exception)
                {
                    lblStatus.Text = "发送数据时发生错误!";
                    return;
                 }
             }
            else 
            
            
            {
                     MessageBox.Show("串口未打开!","错误提示");
                     return;
             }
            txtSend.Text="";        }        private void btnExit_Click(object sender, EventArgs e)
        {
        sp.Close();
        this.Close();
        }        private void btnReceive_Click(object sender, EventArgs e)
        {
          if(IsOpen )
          {
              try 
              {
                  txtReceive.Text+=sp.ReadLine();
               }
              catch(Exception)
              {
                  lblStatus.Text = "读取串口时发僧错误!";
               return;
              }           }
          else 
          {
              MessageBox.Show("串口未打开!","错误提示");
              return;
           }
        }        private void txtSend_TextChanged(object sender, EventArgs e)
        {        }        private void txtReceive_TextChanged(object sender, EventArgs e)
        {        }       
    }
}C#异常

解决方案 »

  1.   

     
               if(s.CompareTo("无")==0)
                {
                    sp.Parity=Parity.None;
                }
                else if(s.CompareTo("奇")==0)
                {
                    sp.Parity=Parity.Odd;
                }
                else if(s.CompareTo("偶")==0)
                {
                    sp.Parity=Parity.Even;
                }
                else
                {
                    sp.Parity=Parity.None;
                }
    奇偶校验位没有设置好,这是主要问题。