博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【C#】Event事件的订阅和发布
阅读量:5995 次
发布时间:2019-06-20

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

学习笔记:学习了委托和事件的用法。事件是一种特殊的委托,记录下事件从订阅到发布的流程。

学习资料源于视频:

新建一个Demo项目,新建以下三个类:

  • Server.cs:模拟服务端,推送消息。
  • Client.cs:模拟客户端,订阅消息。
  • Program.cs:模拟控制程序。

Server.cs:

using System;namespace EventDemo{    // 定义Event前必须先定义Delegate    public delegate void DelSendMsg(string msg);    // 模拟服务端 推送消息    public class Server    {        // 事件是委托的实例对象        public static event DelSendMsg sendMsgEvent;        // 服务器端推送消息给客户端的方法        public void SendMsg(string msg)        {            Console.WriteLine("服务器端开始推送消息!");            // sendMsgEvent由客户端初始化,如果它不为空,即表示客户端订阅了该事件            if (sendMsgEvent != null)            {                // 执行委托(执行事件,就是执行它注册的方法)                sendMsgEvent(msg);            }        }    }}

Client.cs:

using System;namespace EventDemo{    // 表示手机客户端 订阅消息推送事件    class Client    {        // 订阅事件:客户端订阅服务端推送消息的功能        public void Subscription()        {            Console.WriteLine("客户端订阅了推送事件!");            Server.sendMsgEvent += Server_sendMsgEvent; // 实例化,给事件绑定方法        }        private void Server_sendMsgEvent(string msg)        {            Console.WriteLine("客户端接收到的推送消息:" + msg);        }    }}

Program.cs:

namespace EventDemo{    // 模拟控制程序    public class Program    {
static void Main(string[] args) { Client client = new Client(); Server server = new Server(); // 客户端订阅消息 client.Subscription(); // 服务端推送消息 server.SendMsg("我就是推送的消息!"); } }}

最后运行结果如下:

这里写图片描述

 


关于事件Event和代理/委托Delegate的区别:

 

你可能感兴趣的文章
HTML5 File API — 让前端操作文件变的可能
查看>>
Redis的三种启动方式
查看>>
Spring Framework 官方文档学习(四)之Validation、Data Binding、Type Conversion(一)
查看>>
oozie 常用命令
查看>>
移动端 touch
查看>>
[转]How to display the data read in DataReceived event handler of serialport
查看>>
Field.Store ,ANALYZED备忘
查看>>
Java 理论与实践: 正确使用 Volatile 变量
查看>>
URL编码与解码
查看>>
Webcast视频(WCF+Silverlight快速演示)
查看>>
Windows 退出码
查看>>
2012开篇
查看>>
制作win7的u盘镜像
查看>>
ASP.NET中javascript与c#互相访问
查看>>
启动器与选择器-运行模式【WP7学习札记之十二】
查看>>
【转载】wpf学习笔记1
查看>>
【转】IOS数据持久化三个方法:plist、sqlite3、Archiver
查看>>
java类的访问权限
查看>>
Use ActionFilterAttribute to check user logging
查看>>
post与get在ashx中的取值的区别
查看>>