using System;
using System.IO.Ports;
using System.Windows.Forms;

namespace Dll_Serial_Comm
{
    public class Dll_Serial_Comm
    {
        private SerialPort serialPort;
        private string dataRevcived = string.Empty;
        public Dll_Serial_Comm()
        {
            serialPort = new SerialPort();
            Ini_Com _ini = new Ini_Com();
            serialPort.WriteBufferSize = 1024;           
            serialPort.ReadBufferSize = 1024;
            serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
            serialPort.PortName = “COM1”;
            serialPort.BaudRate = 19200;
            serialPort.DataBits = 8;
            serialPort.StopBits = System.IO.Ports.StopBits.One;//1个停止位
            serialPort.Parity = System.IO.Ports.Parity.Odd;//奇校验位
            serialPort.ReadTimeout = 1000;//读取超时设置
            serialPort.WriteTimeout =1000;//写入超时设置
            serialPort.DiscardNull = true;
            serialPort.ReceivedBytesThreshold = 5;
            serialPort.NewLine = "\r";//读取正行的标志
        }
        public event EventHandler<WWW_EventArgs> Event_Get_Message;//事件,带个参数
        protected virtual void OnEvent_Get_Message(WWW_EventArgs e)
        {
            EventHandler<WWW_EventArgs> handler = Event_Get_Message;
            if (handler != null)
            {
                handler(this, e);
            }
        }
        void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            ReadData();
        }
        void ReadData()
        {        
            dataRevcived = serialPort.ReadLine();
            WWW_EventArgs ee = new WWW_EventArgs(dataRevcived);
            OnEvent_Get_Message(ee);//触发事件
        }
        public void WritePort(string command)
        {
            if (!IsOpen)
            {
                Open();
            }
            serialPort.DiscardInBuffer();//还闹不清机理,加上安全
            serialPort.DiscardOutBuffer();
            serialPort.WriteLine(command);
        }  
        public void Buffer_Clean()
        {
            serialPort.DiscardInBuffer();
            serialPort.DiscardOutBuffer();
        }
        public bool IsOpen
        {
            get { return serialPort.IsOpen; }
        }
        public void Open()
        {
            if (serialPort.IsOpen)
            {
                Close();            
            }
            try
            {
                serialPort.Open();
                serialPort.DiscardOutBuffer();
                serialPort.DiscardInBuffer();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                serialPort.Dispose();
                serialPort = new SerialPort();
                serialPort.Open();
            }          
        }
        public void Close()
        {
            try
            {
                serialPort.DiscardInBuffer();
                serialPort.DiscardOutBuffer();
                serialPort.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                serialPort.Dispose();
                serialPort = new SerialPort();
                serialPort.Close();
            }
        }
        public void End()
        {
            serialPort.Dispose();
        }
    }

public class WWW_EventArgs : EventArgs//事件参数,各种类型参数重载一下构造函数
    {
        private string args_string;
        public string Args_string
        {
            get { return args_string; }
            set { args_string = value; }
        }
        public WWW_EventArgs(string s)
        {
            args_string = s;
        }

private int args_int;
        public int Args_int
        {
            get { return args_int; }
            set { args_int = value; }
        }
        public WWW_EventArgs(int s)
        {
            args_int = s;
        }

private string[] args_string_array;
        public string[] Args_string_array
        {
            get { return args_string_array; }
            set { args_string_array = value; }
        }
        public WWW_EventArgs(string[] s)
        {
            args_string_array = s;
        }

private object args_object;
        public object Args_object
        {
            get { return args_object; }
            set { args_object = value; }
        }
        public WWW_EventArgs(object s)
        {
            args_object = s;
        }
    }
}

C#_串口程序_二次打包_事件响应的更多相关文章

  1. C#_串口通信_SerialPort_一个最基础的串口程序

    一个最最基础的 串口通信 程序!!! 最近正在学c#_还不是很熟悉_只是有点java的基础 SerialPort类 的介绍 http://msdn.microsoft.com/zh-cn/librar ...

  2. 第011课_串口(UART)的使用

    from: 第011课_串口(UART)的使用 第001节_辅线1_硬件知识_UART硬件介绍 1. 串口的硬件介绍 UART的全称是 Universal Asynchronous Receiver ...

  3. 七牛云如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器?

    一般情况下,点账户名——账户设置——安全设置,即可开通两步验证 具体步骤见链接  七牛云如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器?   二次验证码小程序(官网)对比谷歌身份验证器APP ...

  4. twitch游戏直播(【国外】平台)如何绑定二次验证码_虚拟MFA?

    一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接 twitch游戏直播([国外]平台)如何绑定二次验证码_虚拟MFA? 二次验证码小程序于谷歌身份验证器APP的优势(更多见官网 ...

  5. humlbe bundle如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器?

    一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接 humlbe bundle如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器? 二次验证码小程序于谷歌身份验证器APP的 ...

  6. R星游戏如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器?

    一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接 R星游戏如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器? 二次验证码小程序于谷歌身份验证器APP的优势 1.无需下载 ...

  7. 关于虎信如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器?

    一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接 虎信如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器? 二次验证码小程序于谷歌身份验证器APP的优势 1.无需下载ap ...

  8. paypal支付平台如何使用二次验证码_虚拟MFA_两步验证_谷歌身份验证器?

    一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接 paypal支付平台如何使用二次验证码_虚拟MFA_两步验证_谷歌身份验证器? 二次验证码小程序于谷歌身份验证器APP的优势 ...

  9. BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树

    BZOJ_3196_Tyvj 1730 二逼平衡树_树状数组套主席树 Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排 ...

随机推荐

  1. PHP删除Solr文档

    <?php $options = array ( 'hostname' => 'localhost', 'port' => '8080', 'path'=>'solr/help ...

  2. javascript 中的nextSibling和previousSibling使用注意事项

    JavaScript中的nextSibling和previousSibling和作用类似于jquery的next()和prev(),都是获取下一个/上一个同胞元素,如果下一个同级节点不存在,则此属性返 ...

  3. HTML&CSS基础学习笔记1.32-选择器是什么

    选择器是什么 选择器是CSS样式为了定位页面上的任意元素的一种方法. 选择器主要分为:元素标签选择器.通用选择器.类选择器.ID选择器.属性选择器.组合选择器.伪类选择器.伪元素选择器. 先做个了解, ...

  4. C语言笔记(结构体与offsetof、container_of之前的关系)

    关于结构体学习,需要了解:结构体的定义和使用.内存对齐.结构体指针.得到结构体元素的偏移量(offsetof宏实现) 一.复习结构体的基本定义和使用 typedef struct mystruct { ...

  5. iOS开发——OC篇&纯代码退出键盘

    关于iOS开发中键盘的退出,其实方法有很多中,而且笔者也也学会了不少,包括各种非纯代码界面的退出. 但是最近开始着手项目的时候却闷了,因为太多了,笔者确实知道有很多中方法能实现,而且令我影响最深的就是 ...

  6. AngularJs 【使用】 -- ng-repart 排序使用

    1.单字段 ng-repeat="item in dataList | orderBy:'field' " 2.多字段 ng-repeat="item in dataLi ...

  7. 清橙A1484

    http://www.tsinsen.com/ViewGProblem.page?gpid=A1484### 题解: 在线插入并不好做,我们将所有操作离线,变为删除操作. 每次询问的时候对于当前B串所 ...

  8. wxpython线程安全的方法

    wx中实现了3个线程安全的函数.如果在线程中,直接访问并更新主线程的UI,会遇到问题,有时候阻塞UI或者更新不起作用,有时严重的话会引起python崩溃. 三个安全线程如下: wx.PostEvent ...

  9. PS微观效果

    贴入命令必须在建立选区的情况下,然后设置图层的混合模式为“叠加”,这个是必须的. 专业相机的移轴镜头效果很好……PS搞出的不行 原素材如下(去云台山时照的): 打开渐变工具,在快速蒙版模式下选人,然后 ...

  10. 【HDOJ】1423 Greatest Common Increasing Subsequence

    LCIS /* 1423 */ #include <cstdio> #include <cstring> #include <cstdlib> #define MA ...