最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c#?使用線程對(duì)串口serialPort進(jìn)行收發(fā)數(shù)據(jù)(四種)

 更新時(shí)間:2022年07月22日 10:48:28   作者:雪墩墩  
本文主要介紹了c#?使用線程對(duì)串口serialPort進(jìn)行收發(fā)數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

本文主要介紹了c# 使用線程對(duì)串口serialPort進(jìn)行收發(fā)數(shù)據(jù),分享給大家,具體如下:

在這里插入圖片描述

一共寫了四種方法,窗體界面都是一樣的:

方法一:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace serialPort_0620
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            //不進(jìn)行跨線程安全檢查
            System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //檢查是否含有串口
            string[] str = SerialPort.GetPortNames();
            for (int i = 0; i < str.Length; i++)
            {
                comboBox1.Items.Add(str[i]);
            }
            button2.Enabled = false;
            button3.Enabled = false;
            button4.Enabled = false;
            dataGridView1.Rows.Add(68);
            //標(biāo)序號(hào)
            for (int i = 0; i < 69; i++)
            {
                dataGridView1.Rows[i].Cells[0].Value = i;
            }
        }
        /// <summary>
        /// 打開串口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                MessageBox.Show("串口已打開");
            }
            else if (comboBox1.Text == "")
            {
                MessageBox.Show("請(qǐng)選擇端口!");
            }
            else if (textBox1.Text == "")
            {
                MessageBox.Show("請(qǐng)輸入波特率!");
            }

            else
            {
                serialPort1.PortName = comboBox1.Text;
                serialPort1.BaudRate = Convert.ToInt16(textBox1.Text);
                serialPort1.Open();
                button1.Enabled = false;
                button2.Enabled = true;
                button3.Enabled = true;
                button4.Enabled = true;
            }


        }

        /// <summary>
        /// 發(fā)送數(shù)據(jù)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "")
            {
                MessageBox.Show("請(qǐng)輸入要發(fā)送的數(shù)據(jù)");
            }
            else
            {
                serialPort1.WriteLine(textBox2.Text);
                string data = serialPort1.ReadLine();
                listBox1.Items.Add(data);
                int a = listBox1.Items.Count;
                listBox1.SelectedIndex = listBox1.Items.Count - 1;
            }
        }


        /// <summary>
        /// 接收數(shù)據(jù)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {

        }


        /// <summary>
        /// 關(guān)閉串口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            serialPort1.Close();
            button1.Enabled = true;
        }


        Thread thread;


        /// <summary>
        /// 開始
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button5_Click(object sender, EventArgs e)
        {
            if (false == serialPort1.IsOpen)
            {
                MessageBox.Show("端口未打開");
            }
            else
            {
                thread = new Thread(new ThreadStart(PrintEven));
                thread.Start();
            }
        }

        private void PrintEven()
        {
            while (true)
            {
                if (textBox2.Text == "")
                {
                    MessageBox.Show("請(qǐng)輸入要發(fā)送的數(shù)據(jù)");
                }
                else
                {
                    if (serialPort1.IsOpen)
                    {
                        serialPort1.WriteLine(textBox2.Text);
                        string data = serialPort1.ReadLine();
                        listBox1.Items.Add(data);
                        listBox1.SelectedIndex = listBox1.Items.Count - 1;
                        for (int i = 0; i < 47; i++)
                        {
                            string[] result = data.Split(',');
                            dataGridView1.Rows[i].Cells[1].Value = result[i + 1];
                            dataGridView1.Rows[i].Cells[2].Value = Convert.ToDouble(result[i + 1]) * 5.0 / 1024.0;
                        }
                    }
                    Thread.Sleep(5000);
                }

            }
        }


        /// <summary>
        /// 結(jié)束
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button6_Click(object sender, EventArgs e)
        {
            thread.Abort();
        }
    }
}

//不進(jìn)行跨線程安全檢查

方法二:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace serialPort_0620
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
         
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            string[] str = SerialPort.GetPortNames();
            for (int i = 0; i < str.Length; i++)
            {
                comboBox1.Items.Add(str[i]);
            }
            button2.Enabled = false;
            button3.Enabled = false;
            button4.Enabled = false;
            dataGridView1.Rows.Add(68);
            //標(biāo)序號(hào)
            for (int i = 0; i < 69; i++)
            {
                dataGridView1.Rows[i].Cells[0].Value = i;
            }
        }
        /// <summary>
        /// 打開串口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                MessageBox.Show("串口已打開");
            }
            else if (comboBox1.Text == "")
            {
                MessageBox.Show("請(qǐng)選擇端口!");
            }
            else if (textBox1.Text == "")
            {
                MessageBox.Show("請(qǐng)輸入波特率!");
            }

            else
            {
                serialPort1.PortName = comboBox1.Text;
                serialPort1.BaudRate = Convert.ToInt16(textBox1.Text);
                serialPort1.Open();
                button1.Enabled = false;
                button2.Enabled = true;
                button3.Enabled = true;
                button4.Enabled = true;
            }

        }

        private void button2_Click(object sender, EventArgs e)
        {
            serialPort1.Close();
            button1.Enabled = true;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "")
            {
                MessageBox.Show("請(qǐng)輸入要發(fā)送的數(shù)據(jù)");
            }
            else
            {
                serialPort1.WriteLine(textBox2.Text);
               
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            string data = serialPort1.ReadLine();
            listBox1.Items.Add(data);
            int a = listBox1.Items.Count;
            listBox1.SelectedIndex = listBox1.Items.Count - 1;
        }
        //創(chuàng)建線程
        Thread thread;

        //建立委托

        public delegate void SetTextHandler(string result);
        private void setItem(string result)
        {
            if (listBox1.InvokeRequired == true)
            {
                SetTextHandler setTextHandler = setItem;
                listBox1.Invoke(setTextHandler, new object[] { result });
            }
            else
            {

                listBox1.Items.Add(result);
                listBox1.SelectedIndex = listBox1.Items.Count - 1;
            }

        }


        private void button5_Click(object sender, EventArgs e)
        {
            if (false == serialPort1.IsOpen)
            {
                MessageBox.Show("端口未打開");
            }
            else
            {
                thread = new Thread(new ThreadStart(PrintEven));
                thread.Start();
            }
        }


       private void PrintEven()
        {
            while (true)
            {
                if (textBox2.Text == "")
                {
                    MessageBox.Show("請(qǐng)輸入要發(fā)送的數(shù)據(jù)");
                }
                else
                {
                    if (serialPort1.IsOpen)
                    {
                        serialPort1.WriteLine(textBox2.Text);
                        string data = serialPort1.ReadLine();
                        setItem(data);
                        for (int i = 0; i < 47; i++)
                        {
                            string[] result = data.Split(',');
                             dataGridView1 .Rows[i].Cells[1].Value = result[i + 1];
                            dataGridView1.Rows[i].Cells[2].Value = Convert.ToDouble(result[i + 1]) * 5.0 / 1024.0;
                        }
                    }

                    Thread.Sleep(5000);
                }

            }
        }



        /// <summary>
        /// 結(jié)束
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button6_Click(object sender, EventArgs e)
        {
            thread.Abort();
        }
    }
}
// 建立委托 (參考網(wǎng)上  很規(guī)范的寫法)

方法三:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace serialPort_0620
{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }

        private void Form3_Load(object sender, EventArgs e)
        {
            string[] str = SerialPort.GetPortNames();
            for (int i = 0; i < str.Length; i++)
            {
                comboBox1.Items.Add(str[i]);
            }
            button2.Enabled = false;
            button3.Enabled = false;
            button4.Enabled = false;
            dataGridView1.Rows.Add(68);
            //標(biāo)序號(hào)
            for (int i = 0; i < 69; i++)
            {
                dataGridView1.Rows[i].Cells[0].Value = i;
            }
        }

        /// <summary>
        /// 打開串口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                MessageBox.Show("串口已打開");
            }
            else if (comboBox1.Text == "")
            {
                MessageBox.Show("請(qǐng)選擇端口!");
            }
            else if (textBox1.Text == "")
            {
                MessageBox.Show("請(qǐng)輸入波特率!");
            }

            else
            {
                serialPort1.PortName = comboBox1.Text;
                serialPort1.BaudRate = Convert.ToInt16(textBox1.Text);
                serialPort1.Open();
                button1.Enabled = false;
                button2.Enabled = true;
                button3.Enabled = true;
                button4.Enabled = true;
            }

        }

        /// <summary>
        /// 關(guān)閉串口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {

            serialPort1.Close();
            button1.Enabled = true;
        }
        /// <summary>
        /// 發(fā)送數(shù)據(jù)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "")
            {
                MessageBox.Show("請(qǐng)輸入要發(fā)送的數(shù)據(jù)");
            }
            else
            {
                serialPort1.WriteLine(textBox2.Text);

            }
        }
        /// <summary>
        /// 接收數(shù)據(jù)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {

            string data = serialPort1.ReadLine();
            listBox1.Items.Add(data);
            int a = listBox1.Items.Count;
            listBox1.SelectedIndex = listBox1.Items.Count - 1;
        }
        //創(chuàng)建線程
        Thread thread;
        /// <summary>
        /// 開始
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button5_Click(object sender, EventArgs e)
        {
            if (false == serialPort1.IsOpen)
            {
                MessageBox.Show("端口未打開");
            }
            else
            {
                thread = new Thread(new ThreadStart(PrintEven));
                thread.Start();
            }
        }

        private void PrintEven()
        {
            while (true)
            {
                if (textBox2.Text == "")
                {
                    MessageBox.Show("請(qǐng)輸入要發(fā)送的數(shù)據(jù)");
                }
                else
                {
                    if (serialPort1.IsOpen)
                    {
                        serialPort1.WriteLine(textBox2.Text);
                        string data = serialPort1.ReadLine();
                        //setItem(data);
                       
                        listBox1.Invoke(new Action(()=> {
                            listBox1.Items.Add(data);
                            listBox1.SelectedIndex = listBox1.Items.Count - 1;
                            for (int i = 0; i < 47; i++)
                            {
                                string[] result = data.Split(',');
                                dataGridView1.Rows[i].Cells[1].Value = result[i + 1];
                                dataGridView1.Rows[i].Cells[2].Value = Convert.ToDouble(result[i + 1]) * 5.0 / 1024.0;
                            }

                        }));

                    }

                    Thread.Sleep(5000);
                }

            }
        }

        private void button6_Click(object sender, EventArgs e)
        {
            
        }
    }
}
//第二種委托 更常用

方法四:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
using System.IO.Ports;

namespace serialPort_0620
{
    public partial class Form4 : Form
    {
        public Form4()
        {
            InitializeComponent();
        }

        private void Form4_Load(object sender, EventArgs e)
        {
            string[] str = SerialPort.GetPortNames();
            for (int i = 0; i < str.Length; i++)
            {
                comboBox1.Items.Add(str[i]);
            }
            button2.Enabled = false;
            button3.Enabled = false;
            button4.Enabled = false;
            dataGridView1.Rows.Add(68);
            //標(biāo)序號(hào)
            for (int i = 0; i < 69; i++)
            {
                dataGridView1.Rows[i].Cells[0].Value = i;
            }
        }

        /// <summary>
        /// 打開串口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                MessageBox.Show("串口已打開");
            }
            else if (comboBox1.Text == "")
            {
                MessageBox.Show("請(qǐng)選擇端口!");
            }
            else if (textBox1.Text == "")
            {
                MessageBox.Show("請(qǐng)輸入波特率!");
            }

            else
            {
                serialPort1.PortName = comboBox1.Text;
                serialPort1.BaudRate = Convert.ToInt16(textBox1.Text);
                serialPort1.Open();
                button1.Enabled = false;
                button2.Enabled = true;
                button3.Enabled = true;
                button4.Enabled = true;
            }
        }

        /// <summary>
        /// 關(guān)閉串口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            serialPort1.Close();
            button1.Enabled = true;
        }

        /// <summary>
        /// 發(fā)送數(shù)據(jù)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "")
            {
                MessageBox.Show("請(qǐng)輸入要發(fā)送的數(shù)據(jù)");
            }
            else
            {
                serialPort1.WriteLine(textBox2.Text);

            }
        }

        /// <summary>
        /// 接收數(shù)據(jù)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {
            string data = serialPort1.ReadLine();
            listBox1.Items.Add(data);
            int a = listBox1.Items.Count;
            listBox1.SelectedIndex = listBox1.Items.Count - 1;
        }


        //創(chuàng)建線程
        Thread thread;
        /// <summary>
        /// 開始
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button5_Click(object sender, EventArgs e)
        {
            if (false == serialPort1.IsOpen)
            {
                MessageBox.Show("端口未打開");
            }
            else
            {
                thread = new Thread(new ThreadStart(PrintEven));
                thread.Start();
            }

        }

        private void PrintEven()
        {
            while (true)
            {
                if (textBox2.Text == "")
                {
                    MessageBox.Show("請(qǐng)輸入要發(fā)送的數(shù)據(jù)");
                }
                else
                {
                    if (serialPort1.IsOpen)
                    {
                        
                        listBox1.Invoke(new Action(set));

                    }

                    Thread.Sleep(5000);
                }

            }
        }
        void set()
        {
            serialPort1.WriteLine(textBox2.Text);
            string data = serialPort1.ReadLine();
            listBox1.Items.Add(data);
            listBox1.SelectedIndex = listBox1.Items.Count - 1;
            for (int i = 0; i < 47; i++)
            {
                string[] result = data.Split(',');
                dataGridView1.Rows[i].Cells[1].Value = result[i + 1];
                dataGridView1.Rows[i].Cells[2].Value = Convert.ToDouble(result[i + 1]) * 5.0 / 1024.0;
            }



        }



        /// <summary>
        /// 結(jié)束
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button6_Click(object sender, EventArgs e)
        {
            thread.Abort();
        }
    }
}
//建立委托,invoke的第二種寫法

到此這篇關(guān)于c# 使用線程對(duì)串口serialPort進(jìn)行收發(fā)數(shù)據(jù)(四種)的文章就介紹到這了,更多相關(guān)c# 串口serialPort收發(fā)數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c#在程序中定義和使用自定義事件方法總結(jié)

    c#在程序中定義和使用自定義事件方法總結(jié)

    在本篇文章中小編給大家整理了關(guān)于c#在程序中定義和使用自定義事件方法總結(jié)相關(guān)知識(shí)點(diǎn),需要的朋友們學(xué)習(xí)下。
    2019-03-03
  • WPF中下拉框可作選擇項(xiàng)也可以作為只讀文本框使用的方法

    WPF中下拉框可作選擇項(xiàng)也可以作為只讀文本框使用的方法

    這篇文章主要給大家介紹了關(guān)于WPF中下拉框可以選擇項(xiàng)也可以作為只讀文本框使用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-02-02
  • C# 6.0 的知識(shí)梳理

    C# 6.0 的知識(shí)梳理

    目前最新的版本是C# 7.0,VS的最新版本為Visual Studio 2017 RC,兩者都尚未進(jìn)入正式階段。C# 6.0雖說出了一段時(shí)間,但是似乎有許多人對(duì)這一塊知識(shí)并不了解。本文將對(duì)C# 6.0的知識(shí)進(jìn)行梳理,下面跟著小編一起來看下吧
    2016-12-12
  • C#采用OpenXml給Word文檔添加表格

    C#采用OpenXml給Word文檔添加表格

    這篇文章主要介紹了C#采用OpenXml給Word文檔添加表格的方法,是OpenXml操作Word的一個(gè)非常實(shí)用的技巧,需要的朋友可以參考下
    2014-09-09
  • C#實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器小程序

    C#實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器小程序

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C#實(shí)現(xiàn)系統(tǒng)桌面右下角彈框

    C#實(shí)現(xiàn)系統(tǒng)桌面右下角彈框

    這篇文章主要為大家詳細(xì)介紹了C#如何實(shí)現(xiàn)系統(tǒng)桌面右下角彈框,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01
  • 使用C#中的Flags特性

    使用C#中的Flags特性

    這篇文章介紹了使用C#中的Flags特性,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • C#中使用Split方法拆分字符串實(shí)例

    C#中使用Split方法拆分字符串實(shí)例

    這篇文章主要介紹了C#中使用Split方法拆分字符串實(shí)例,本文給出了使用一個(gè)分隔符和多個(gè)分隔符拆分字符串的例子,需要的朋友可以參考下
    2014-08-08
  • C#實(shí)現(xiàn)創(chuàng)建,刪除,查找,配置虛擬目錄實(shí)例詳解

    C#實(shí)現(xiàn)創(chuàng)建,刪除,查找,配置虛擬目錄實(shí)例詳解

    這篇文章主要介紹了C#創(chuàng)建,刪除,查找,配置虛擬目錄的方法,以實(shí)例形式較為詳細(xì)的分析了C#針對(duì)虛擬目錄的創(chuàng)建、刪除、查找等相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-08-08
  • 詳解C# 中Session的用法

    詳解C# 中Session的用法

    這篇文章主要介紹了C# 中Session的用法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07

最新評(píng)論

喀什市| 凤城市| 确山县| 兴化市| 光泽县| 资源县| 天柱县| 柯坪县| 剑川县| 兴安盟| 五台县| 朝阳区| 莫力| 和硕县| 清水河县| 白山市| 大同市| 博野县| 图木舒克市| 新化县| 牡丹江市| 和顺县| 玛多县| 南充市| 通山县| 上犹县| 依安县| 琼海市| 安达市| 白山市| 会同县| 安图县| 宜君县| 遂平县| 盐源县| 赣榆县| 临沧市| 北票市| 黄龙县| 抚顺县| 紫金县|