c#中SerialPort类例子

 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

woquNOKIA

谢谢老板!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值