91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c#怎么使用線程對串口serialPort進行收發數據

發布時間:2022-07-22 11:45:33 來源:億速云 閱讀:281 作者:iii 欄目:開發技術

這篇“c#怎么使用線程對串口serialPort進行收發數據”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“c#怎么使用線程對串口serialPort進行收發數據”文章吧。

具體如下:

c#怎么使用線程對串口serialPort進行收發數據

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

方法一:

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();
            //不進行跨線程安全檢查
            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);
            //標序號
            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("請選擇端口!");
            }
            else if (textBox1.Text == "")
            {
                MessageBox.Show("請輸入波特率!");
            }

            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>
        /// 發送數據
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "")
            {
                MessageBox.Show("請輸入要發送的數據");
            }
            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>
        /// 接收數據
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {

        }


        /// <summary>
        /// 關閉串口
        /// </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("請輸入要發送的數據");
                }
                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>
        /// 結束
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button6_Click(object sender, EventArgs e)
        {
            thread.Abort();
        }
    }
}

//不進行跨線程安全檢查

方法二:

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);
            //標序號
            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("請選擇端口!");
            }
            else if (textBox1.Text == "")
            {
                MessageBox.Show("請輸入波特率!");
            }

            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("請輸入要發送的數據");
            }
            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;
        }
        //創建線程
        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("請輸入要發送的數據");
                }
                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>
        /// 結束
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button6_Click(object sender, EventArgs e)
        {
            thread.Abort();
        }
    }
}
// 建立委托 (參考網上  很規范的寫法)

方法三:

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);
            //標序號
            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("請選擇端口!");
            }
            else if (textBox1.Text == "")
            {
                MessageBox.Show("請輸入波特率!");
            }

            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>
        /// 關閉串口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {

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

            }
        }
        /// <summary>
        /// 接收數據
        /// </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;
        }
        //創建線程
        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("請輸入要發送的數據");
                }
                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);
            //標序號
            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("請選擇端口!");
            }
            else if (textBox1.Text == "")
            {
                MessageBox.Show("請輸入波特率!");
            }

            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>
        /// 關閉串口
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            serialPort1.Close();
            button1.Enabled = true;
        }

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

            }
        }

        /// <summary>
        /// 接收數據
        /// </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;
        }


        //創建線程
        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("請輸入要發送的數據");
                }
                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>
        /// 結束
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button6_Click(object sender, EventArgs e)
        {
            thread.Abort();
        }
    }
}
//建立委托,invoke的第二種寫法

以上就是關于“c#怎么使用線程對串口serialPort進行收發數據”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

祁东县| 四平市| 宁化县| 读书| 抚顺县| 伊宁市| 陆河县| 航空| 梁山县| 军事| 本溪市| 南丰县| 涪陵区| 平利县| 宕昌县| 莫力| 舒兰市| 吕梁市| 鹰潭市| 和平县| 电白县| 新营市| 出国| 巴中市| 绿春县| 信阳市| 焦作市| 通榆县| 霞浦县| 望奎县| 甘泉县| 高唐县| 绥化市| 安龙县| 稻城县| 扶余县| 磴口县| 鹤山市| 普洱| 五大连池市| 余干县|