博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#委托事件 自己理解
阅读量:5054 次
发布时间:2019-06-12

本文共 1422 字,大约阅读时间需要 4 分钟。

都说C#的委托与事件,对初学者来说很难,但是一跃过去就很简单了

单是我这个一跃不知道还要多久,为什么对有些人来说简单的事,我却那么难,好吧,这个是必须掌握的

需求:发卡器,我要去程序中调用发卡器的方法,得到卡的卡号信息

常人理解:很简单,卡一方,点下读取的事件就可以了

我:想把它做成公用的DLL,使用事件注册来实现读取卡号

1.新建类库 ReaderTest--》类Reader

 public Reader(){}-->构造函数(里面又写了连接发卡器的方法)

2.定义委托

 public delegate void ReaderEventHandler(CardInfo card);

3.定义事件

public event ReaderEventHandler ReaderEvent;

4.事件触发方法 

protected virtual void ReaderCard(CardInfo card)

{   //防止可能存在的多线程同步问题。

     
ReaderCardHandler tmpEvent = 
ReaderCardEvent;
     if (tmpEvent != null)
     {
         tmpEvent(e);
      }
}
5.信息类
public class CardInfo
{
   //a,b属性略
   public CardInfo(string a,string b)
  {
     赋值略
   }
}

6.对外的方法界面类调用方法 实现事件数据传输通道口

public void GetCardInfo()

{

//逻辑方法处理处

           ulong CardNo;
            int CardType;
            int nRet = 
Card_ReadCardNo(&CardNo, &CardType);
            if (nRet == 0)
            {
                string cardno = CardNo.ToString("x8");
                string cardtype = CardType.ToString();
               
 CARDINFO card = new CARDINFO(cardno,cardtype);
                //传递事件方法
                
ReadCard(card);
            }
            else
            {
                Console.WriteLine("无法连接一卡通");
            }

}

7。生成dll

8.界面类使用(添加完引用)

先实例化类

在LOAD里注册事件

  Reader.ReaderCardEvent += new XZX.ReaderSU.ReaderCard.ReaderCardHandler(ReadCard);

//ReadCard方法实现 与内部委托参数一致

private void 
ReadCard(
XZX.ReaderSU.ReaderCard.CARDINFO e)
        {
            string cardno = e.CardNo;
            string cardtype = e.CardType;
           //更新界面元素
            this.Invoke(new Action(() =>
            {
                lblCardNo.Text = cardno;
                lblType.Text = cardtype;
                lblTime.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            }));
           
        }

转载于:https://www.cnblogs.com/Gracedream/p/5139951.html

你可能感兴趣的文章
水平垂直居中的那些事儿
查看>>
Slickflow.NET 开源工作流引擎基础介绍(二) -- 引擎组件和业务系统的集成
查看>>
【iOS7开发笔记】tableview之Cell的重用原理
查看>>
什么是ODBC和JDBC?
查看>>
蓝桥杯- 入门训练 Fibonacci数列
查看>>
EnableEventValidation错误原因分析以及解决办法
查看>>
Java编程练习(四)——集合框架应用
查看>>
快速排序法
查看>>
win10 添加项目右键用vscode打开
查看>>
关于Kb/s,KB/s的一些知识
查看>>
2019-1-9笔记
查看>>
程序员求职之道(《程序员面试笔试宝典》)之面试官箴言?
查看>>
加速网站访问的一些实践体会
查看>>
中国象棋程序的设计与实现(一)--项目截图
查看>>
十一月书稿
查看>>
两只小熊队高级软件工程第九次作业敏捷冲刺4
查看>>
推荐一个好用的虚拟主机
查看>>
ulimit
查看>>
php代码执行顺序
查看>>
php 写入数据到MySQL以及从MySQL获取数据,页面出现乱码的解决方法
查看>>