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

C# 串口掃描槍讀取數(shù)據(jù)的實現(xiàn)

 更新時間:2025年04月08日 09:31:56   作者:butterfly_onfly  
本文主要介紹了C# 串口掃描槍讀取數(shù)據(jù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧

首先,創(chuàng)建一個掃描槍的工具類CommBar

/// <summary>
    /// 掃描槍(串口 )工作類
    /// </summary>
    public class CommBar : IDisposable
    {
        /// <summary>
        /// 串口引用
        /// </summary>
        public SerialPort serialPort;

        /// <summary>
        /// 存儲轉(zhuǎn)換的數(shù)據(jù)值
        /// </summary>
        public string Code { get; set; }

        /// <summary>
        /// 掃描槍(串口 )工作類
        /// </summary>
        public CommBar()
        {
            serialPort = new SerialPort();
        }

        /// <summary>
        /// 串口狀態(tài)
        /// </summary>
        public bool IsOpen
        {
            get
            {
                return serialPort.IsOpen;
            }
        }

        /// <summary>
        /// 打開串口
        /// </summary>
        /// <returns></returns>
        public bool Open()
        {
            if (serialPort.IsOpen)
            {
                Close();
            }
            serialPort.Open();
            if (serialPort.IsOpen)
            {
                return true;
            }
            else
            {
                MessageBox.Show("串口打開失??!");
                return false;
            }
        }

        /// <summary>
        /// 關(guān)閉串口
        /// </summary>
        public void Close()
        {
            serialPort.Close();
        }

        /// <summary>
        /// 寫入數(shù)據(jù)
        /// </summary>
        /// <param name="send">數(shù)據(jù)</param>
        /// <param name="offSet">偏移量</param>
        /// <param name="count">字節(jié)數(shù)</param>
        public void WritePort(byte[] send, int offSet, int count)
        {
            if (IsOpen)
            {
                serialPort.Write(send, offSet, count);
            }
        }

        /// <summary>
        /// 獲取可用串口
        /// </summary>
        /// <returns>串口名稱列表</returns>
        public string[] GetComName()
        {
            string[] names = null;
            try
            {
                names = SerialPort.GetPortNames(); // 獲取所有可用串口的名字
            }
            catch (Exception)
            {
                System.Windows.Forms.MessageBox.Show("找不到串口");
            }
            return names;
        }

        /// <summary>
        /// 注冊一個串口
        /// </summary>
        /// <param name="portName">端口號</param>
        /// <param name="baudRate">波特率</param>
        public void SerialPortValue(string portName, int baudRate)
        {
            //串口名
            serialPort.PortName = portName;
            //波特率
            serialPort.BaudRate = baudRate;
            //數(shù)據(jù)位
            serialPort.DataBits = 8;
            //兩個停止位
            serialPort.StopBits = System.IO.Ports.StopBits.One;
            //無奇偶校驗位
            serialPort.Parity = System.IO.Ports.Parity.None;
            serialPort.ReadTimeout = 100;
            //commBar.serialPort.WriteTimeout = -1;
        }

        #region 實現(xiàn)IDisposable

        private bool m_disposed = false;//標識資源是否被釋放過

        /// <summary>
        /// 釋放
        /// </summary>
        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);//防止Finalize調(diào)用
        }

        /// <summary>
        /// 釋放
        /// </summary>
        /// <param name="disposing"></param>
        protected virtual void Dispose(bool disposing)
        {
            if (!m_disposed)
            {
                if (disposing)
                {
                    //釋放托管資源
                    serialPort.Close();
                }
                //釋放非托管資源
                m_disposed = true;
            }
        }

        /// <summary>
        /// 析構(gòu)函數(shù)
        /// </summary>
        ~CommBar()
        {
            Dispose(false);
        }

        #endregion
    }

在窗體里面使用,需要實例化該類,建議先在構(gòu)造函數(shù)外面聲明類對象,在構(gòu)造函數(shù)里面實例化對象

CommBar commBar;
        public Form2()
        {
          InitializeComponent();
            commBar = new CommBar();
            //注冊一該串口
            commBar.SerialPortValue("COM1", 9600);
            //打開串口
            if (commBar.Open())
                //關(guān)聯(lián)事件處理程序
                commBar.serialPort.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort_DataReceived);
        }

接下來創(chuàng)建委托和事件

//委托,指向CodeText方法
        private delegate void ModifyButton_dg(CommBar commBar);

        //串口接收接收事件處理程序
        //每當串口講到數(shù)據(jù)后激發(fā)
        void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            System.Threading.Thread.Sleep(100);
            byte[] m_recvBytes = new byte[commBar.serialPort.BytesToRead];//定義緩沖區(qū)大小
            int result = commBar.serialPort.Read(m_recvBytes, 0, m_recvBytes.Length);//從串口讀取數(shù)據(jù)
            if (result <= 0)
                return;
            commBar.Code = Encoding.ASCII.GetString(m_recvBytes, 0, m_recvBytes.Length);//對數(shù)據(jù)進行轉(zhuǎn)換
            this.Invoke(new ModifyButton_dg(CodeText), commBar);//調(diào)用委托,將值傳給文本框
            commBar.serialPort.DiscardInBuffer();
        }

給文本框之類的容器賦值

//用來為文本框賦值
        private void CodeText(CommBar commBar)
        {
          //加邏輯判斷等
            this.txt_ASN.Text = commBar.Code;
               
        }

窗體里面需要顯示成功或失敗的文字描述,這里建議這么使用

this.lbl_error.Text = "ASN碼已存在!";
  this.lbl_error.Visible = true;
  System.Threading.Tasks.Task.Delay(3000).ContinueWith(_ =>
   {
      Invoke(new MethodInvoker(() => {
      lbl_error.Visible = false;

       }));
   });

到此這篇關(guān)于C# 串口掃描槍讀取數(shù)據(jù)的實現(xiàn)的文章就介紹到這了,更多相關(guān)C# 串口掃描槍讀取內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C# Socket網(wǎng)絡(luò)編程實例

    C# Socket網(wǎng)絡(luò)編程實例

    這篇文章主要介紹了C# Socket網(wǎng)絡(luò)編程實例,分析了Socket網(wǎng)絡(luò)通信的原理與具體應(yīng)用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • C# Newtonsoft.Json用法詳解

    C# Newtonsoft.Json用法詳解

    本文主要介紹了C# Newtonsoft.Json用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2023-02-02
  • 配置C#的系統(tǒng)環(huán)境變量的方法

    配置C#的系統(tǒng)環(huán)境變量的方法

    配置C#的系統(tǒng)環(huán)境變量的方法...
    2007-03-03
  • C#使用二分查找法判斷指定字符的方法

    C#使用二分查找法判斷指定字符的方法

    這篇文章主要介紹了C#使用二分查找法判斷指定字符的方法,結(jié)合實例形式分析了C#二分查找法進行字符串查找的定義與使用技巧,需要的朋友可以參考下
    2016-06-06
  • C# HTTP認證方式詳解與代碼實現(xiàn)

    C# HTTP認證方式詳解與代碼實現(xiàn)

    在C#中,HTTP認證是客戶端與服務(wù)器之間進行身份驗證的一種機制,常見的HTTP認證方式包括:Basic認證、Digest認證、OAuth、Bearer Token等,下面我們將從工作原理、優(yōu)缺點對比、代碼實現(xiàn)、案例實戰(zhàn)四個方面詳細介紹這些認證方式,需要的朋友可以參考下
    2025-03-03
  • WPF TextBox實現(xiàn)按字節(jié)長度限制輸入功能

    WPF TextBox實現(xiàn)按字節(jié)長度限制輸入功能

    這篇文章主要為大家詳細介紹了WPF TextBox實現(xiàn)按字節(jié)長度限制輸入功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • C# WinForm-Timer控件的使用

    C# WinForm-Timer控件的使用

    這篇文章主要介紹了C# WinForm-Timer控件的使用,幫助大家更好的理解和學(xué)習c# winform,感興趣的朋友可以了解下
    2020-11-11
  • C#如何在窗體程序中操作數(shù)據(jù)庫數(shù)據(jù)

    C#如何在窗體程序中操作數(shù)據(jù)庫數(shù)據(jù)

    這篇文章主要介紹了C#如何在窗體程序中操作數(shù)據(jù)庫數(shù)據(jù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • C#線程 BeginInvoke和EndInvoke使用方法

    C#線程 BeginInvoke和EndInvoke使用方法

    本文開始C#線程系列講座之一,即BeginInvoke和EndInvoke的使用方法,需要的朋友可以參考下
    2013-05-05
  • C#實現(xiàn)圖像反色的方法

    C#實現(xiàn)圖像反色的方法

    這篇文章主要介紹了C#實現(xiàn)圖像反色的方法,涉及C#操作圖像顏色轉(zhuǎn)換的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04

最新評論

平南县| 平湖市| 新闻| 沂水县| 嘉峪关市| 乐清市| 温州市| 濮阳县| 双桥区| 镇远县| 乃东县| 东方市| 东乌珠穆沁旗| 景德镇市| 博白县| 灯塔市| 东丽区| 外汇| 湛江市| 道孚县| 肇州县| 达日县| 禹州市| 如皋市| 忻州市| 武汉市| 巨鹿县| 长沙县| 工布江达县| 泗水县| 喀什市| 西平县| 泸定县| 刚察县| 固阳县| 广东省| 昭觉县| 宜兰市| 邹平县| 凤翔县| 叶城县|