我写了一段小小的程序,用c#写的,是一段连接串口的程序
一开始还是运行正常连接上串口的,不知道为什么睡了一觉,就发现“串口拒接访问”了,好郁闷代码如下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 chuankou2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }        /// <summary>
        /// 创建一个串口对象(全局变量)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        SerialPort port;        /// <summary>
        /// 串口的初始化
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void InitPort(string portName)
        {
            port = new SerialPort();
            port.PortName = portName;
            port.BaudRate = 9600;
            port.Parity = Parity.None;
            port.StopBits = StopBits.One;
            port.Handshake = Handshake.RequestToSend;
            port.ReceivedBytesThreshold = 4;
            port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
        }        void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            throw new NotImplementedException();
            ///在这里对接受的数据进行处理
        }        private void Form1_Load(object sender, EventArgs e)
        {
            cbName.Items.Clear();
            cbName.Items.AddRange(SerialPort.GetPortNames());
            cbName.SelectedIndex = 0;
        }        /// <summary>
        /// 打开串口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void OpenPort()
        {
            try
            {
                port.Open();
            }
            catch
            {
                if (port.IsOpen)
                {
                    MessageBox.Show("Open Success");
                }
                else
                {
                    MessageBox.Show("Open Fail");
                }
            }
            finally
            {
                port.Close();
            }
        }        private void btnOpen_Click(object sender, EventArgs e)
        {
            InitPort(this.cbName.SelectedItem.ToString());
            OpenPort();
        }
    }
}

解决方案 »

  1.   

    上面的程序不怎么开串口都打不开,如下注释即可。
      finally
      {
         //port.Close();
      }
    1,程序退出时要将串口关闭,
    2,为确保安全打开串口,在打开前判断是否已经是打开的,若是则先关闭再打开,
    3,从你上面代码可以看出,虽然串口打开失败,但抛出的异常显示已经成功,并不是本程序开的,或已经不是本次打开的进程ID,应该这样写:/// <summary>
      /// 打开串口
      /// </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      public void OpenPort()
      {
      try
      {
       if(port.isopen())
         {
             port.close();
         }
      port.Open();
      }
      catch(Exception ex)
      {
      //if (port.IsOpen)
      //{
      MessageBox.Show(ex.Message);//"Open Success");
      //}
      //else
      //{
      //MessageBox.Show("Open Fail");
      //}
      }
      finally
      {
         //port.Close();
      }
      }