c#中SerialPort类例子

来源:互联网 发布:淘宝双十一退货潮 编辑:程序博客网 时间:2024/05/01 13:55
 public partial class Main : Form
    {
       // private string[] ports = { "COM1" };
        private string[] baud = {"110", "300", "600", "1200", "2400", "4800", "9600",
                                 "14400", "19200", "38400", "57600", "115200", "230400",
                                 "380400", "460800", "921600"};
        private string[] dataBit = { "5", "6", "7", "8" };
        private string[] parityCheck = { "无", "奇校验", "偶校验", "标记", "空格" };
        private string[] stopBit = { "1", "1.5", "2" };


        static SerialPort serialport;
        string pathFile;


        public Main()
        {
            InitializeComponent();
            this.reset();


        }


        private void Reset_Click(object sender, EventArgs e)
        {
            this.reset();
        }


        public void reset()
        {
            port.Items.Clear();
            for(int i =0;i <= 50; i++)
            {
                string temp = "COM";
                temp += i.ToString();
                port.Items.Add(temp);
            }
            port.Text = "COM4";


            baudRate.Items.Clear();
            foreach (string temp in baud)
            {
                baudRate.Items.Add(temp);
            }
            baudRate.Text = baud[6];//baudRate.Text=baudRate.Items[0] as string;


            dataBits.Items.Clear();
            foreach (string temp in dataBit)
            {
                dataBits.Items.Add(temp);
            }
            dataBits.Text = dataBit[3];


            parity.Items.Clear();
            foreach (string temp in parityCheck)
            {
                parity.Items.Add(temp);
            }
            parity.Text = parityCheck[0];


            stopBits.Items.Clear();
            foreach (string temp in stopBit)
            {
                stopBits.Items.Add(temp);
            }
            stopBits.Text = stopBit[0];
        }


        //先打开窗口,选择完路径和文件名,点击确定后开始接受。
        private void saveFile_Click(object sender, EventArgs e)
        {
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Title = "另存为对话框";//对话框标题
            //sfd.InitialDirectory = "C:\\";//对话框初始目录
            sfd.Filter = "文本文件|*.txt|所有文件|*.*";
            if (sfd.ShowDialog() != DialogResult.OK)
            {
                //bmp.Save(sfd.FileName);//这里看清楚,对话框只是负责提供打开和保存路径
                MessageBox.Show("没有成功选择数据文件保存路径及名称");
            }
           
            try
            {
                FileStream filestreamlength = new FileStream(sfd.FileName, FileMode.CreateNew, FileAccess.ReadWrite);
                filestreamlength.Close();
            }
            catch (IOException)
            {
                string temp = sfd.FileName+="文件已经存在,重起名";
                MessageBox.Show(temp);
            }
            pathFile = sfd.FileName;
            int rate = int.Parse(baudRate.Text);//波特率
            Parity par = Parity.None;//奇偶校验
            if (parity.Text == parityCheck[1])
                par = Parity.Odd;
            else if (parity.Text == parityCheck[2])
                par = Parity.Even;
            else if (parity.Text == parityCheck[3])
                par = Parity.Mark;
            else if (parity.Text == parityCheck[4])
                par = Parity.Space;
            int data = int.Parse(dataBits.Text);//数据位
            StopBits stop = StopBits.One;//停止位
            if (stopBits.Text == stopBit[1])
                stop = StopBits.OnePointFive;
            else if (stopBits.Text == stopBit[2])
                stop = StopBits.Two;


            serialport = new SerialPort(port.Text, rate, par, data, stop);


            serialport.ReadBufferSize = 5000;
            serialport.Open();


            //string aa = serialport.ReadLine();


            //不行就把下边的创建一个线程
            //配置串口
            Thread t = new Thread(new ThreadStart(ThreadProc));
            t.Start();
        }


        public  void ThreadProc()
        {
            
            string str;
            bool quit = true;
            StreamWriter writerName = new StreamWriter(pathFile);
            while (quit)//循环接受,并下到文件中
            {
                try
                {
                    str = serialport.ReadLine();//串口在exit中关闭后悔发生异常
                }
                catch
                {
                    //  Thread.Ab// WaitCursor.exit(); //  kill();
                    writerName.Close();
                    break;//application.ExitThread 不好使
                    // str = " 端到端"    
                }
                writerName.WriteLine(str);
                writerName.Flush();
                //或如下是不行的,有可能if进去了,但串口已经关闭了
                //if (serialport.IsOpen)
                //{
                //    str = serialport.ReadLine();
                //    writerName.WriteLine(str);
                //    writerName.Flush();
                //}
                //else
                //{
                //    quit = false;    //这样quit
                //    writerName.Close();
                //}
            }
        }


        private void exit_Click(object sender, EventArgs e)
        {
            try
            {
                serialport.Close();
               // writerName.Close();//或者移到死循环后边 调试试试
            }
            catch { }
            this.Dispose();
        }


        private void windowCloseing(object sender, FormClosingEventArgs e)
        {
            try
            {
                serialport.Close();
                
            }
            catch { }
        }
0 0
原创粉丝点击