C#委托、事件、线程
这是几个简单的例子,但是实际的开发中委托还还只在反射时用到过,事件的话只自己做了一次,并且还是特意去用的 ,实际上可以不用。线程的话,因为需要,所以用的会多点,这里主要是WS上的线程。
委托
在前面的反射实例中,也有用到委托执行方法。
这个例子是将一个方法或者委托实例作为另外一个函数的入参传递。
至于有什么用,我现在还没用上。
private delegate void Dosth(string s);//定义委托 无返回值 一个string参数
private void button2_Click_1(object sender, EventArgs e)
{ Dosth dosth = new Dosth(Func);//实例化委托,
DoMain(dosth);//DoMain(Func) 调用函数方法DoMain,入参可以是对应的方法Func也可以是委托实例化的后的dosth
}
private void Func(string s)
{
MessageBox.Show(s);
}
private void DoMain(Dosth fun) //方法DoMain 入参接收一个委托实例或者函数:返回值是空,入参是一个string
{
fun("hello world!");
}
事件
事件使用发布-订阅模型,事件在类中申明且生成,通过使用同一个类或者其他类中的委托与事件处理程序关联。
包含事件的类用于发布事件,被称为发布器,其他接收该事件的类称为订阅器。
发布器中描述的是怎么调用事件,也就是触发事件,订阅器中实际是事件具体的执行,最终要做什么在订阅器中完成。
这是一个实例。
发布器类
发布事件,定义触发事件执行的逻辑的设定。
public class Publish {
private int value;
public delegate void MyDelegate(string s);//申明委托
public event MyDelegate MyEvent;//基于申明的委托定义事件
public Publish()
{
value = ;
}
public void CompairValue(int n)
{
if (n == value)//满足条件
{
OnValueChanged();
}
}
protected void OnValueChanged()
{
if (MyEvent != null)
{
MyEvent("hello world!");//触发订阅器中的方法执行
}
}
}
订阅器类
被触发时,做该做的事。
public class Subscribe
{
public void ShowMessage(string s)
{
MessageBox.Show(s);//事件触发,订阅器中执行指定操作,更多的的操作可以在这个类中完成
}
}
触发器
private void button3_Click(object sender, EventArgs e)
{
Publish pub = new Publish();
Subscribe sub = new Subscribe();
pub.MyEvent += sub.ShowMessage;//或者new Publish.MyDelegate(sub.ShowMessage); 把订阅器中的方法绑定到事件上,也就是注册发布器中的事件
pub.CompairValue();//当入参为3时,触发事件,订阅器中的方法则执行
}
线程
这里的线程是WS上的线程
public void DoMain(){
static object ThreadLock = new object();
public static Thread thread;
lock (ThreadLock)
{
try
{
Boolean ThreadIsExit = thread.IsAlive;//如果报错说明线程不存在
if (!ThreadIsExit)
{ thread.Start(); }
}
catch
{try
{
thread = new Thread(new ThreadStart(Dosth));//开启一个线程,回调函数Dosth
thread.IsBackground = true;//设置线程为后台线程
thread.Start();
}
catch (Exception ex)
{
}
finally
{ } }
finally { }
} }
public void Dosth(){ }
C#委托、事件、线程的更多相关文章
- C# ~ 从 委托事件 到 观察者模式 - Observer
委托和事件的部分基础知识可参见 C#/.NET 基础学习 之 [委托-事件] 部分: 参考 [1]. 初识事件 到 自定义事件: [2]. 从类型不安全的委托 到 类型安全的事件: [3]. 函数指针 ...
- C#委托,事件理解入门 (译稿)
原文地址:http://www.codeproject.com/Articles/4773/Events-and-Delegates-Simplified 引用翻译地址:http://www.cnbl ...
- 关于ios使用jquery的on,委托事件失效
$('.parents').on("click",'.child',function(){}); 类似上面这种,在ios上点击"child"元素不会起作用,解决 ...
- Observer设计模式中-委托事件-应用在消息在窗体上显示
Observer设计模式:监视者模式.在类中的方法中处理的结果或者消息通过事件委托 的方式发送给主窗体. 因为在其它类中直接访问主窗体类,显示内容是不能直接调用控件赋值的,当然也有别的类似查阅控件名, ...
- Asp.net用户控件和委托事件
在Asp.net系统制作过程中,门户类型的网站,我们可以用DIV+CSS+JS+Ajax全部搞定,但是一旦遇到界面元素比较复杂的时候,还是UserControl比较方便一些,各种封装,各种处理,然后拖 ...
- jQuery里面的普通绑定事件和on委托事件
以click事件为例: 普通绑定事件:$('.btn1').click(function(){}绑定 on绑定事件:$(document).on('click','.btn2',function(){ ...
- c#基础学习笔记-----------委托事件
这里有一个比较简单的委托实例应用(跨窗体操作控件) http://blog.csdn.net/bdstjk/article/details/7004035 还有一个比较详细的介绍并深入理解委托事件的讲 ...
- Storm系列(九)架构分析之Supervisor-同步Nimbus的事件线程
Supervisor由三个线程组成,一个计时器线程和两个事件线程. 计时器线程负责维持心跳已经更新Zookeeper中的状态,还负责每隔一定的时间将事件线程需要执行的事件添加到其对应的队列中. 两个事 ...
- c#委托事件入门--第二讲:事件入门
上文 c#委托事件入门--第一讲:委托入门 中和大家介绍了委托,学习委托必不可少的就要说下事件.以下思明仍然从事件是什么.为什么用事件.怎么实现事件和总结介绍一下事件 1.事件是什么:. 1.1 NE ...
- Unity C#笔记 委托&事件
C#的委托与事件搭配,即是观察者模式的一种实现. 因为观察者模式的原理很易懂,不作多讲,本文纯粹用于记录语法. delegate(委托) //声明没有参数,没有返回值的委托类型XXXX public ...
随机推荐
- CTF丨2019互联网安全城市巡回赛·西安站,我们来了!
万物互联时代,网信事业发展突飞猛进,互联网悄然渗透到国民生活的每一个角落,伴随而来的网络安全威胁和风险也日渐突出.网络诈骗.钓鱼软件.勒索病毒等安全问题层出不穷,信息泄露等网络安全事件也频繁上演,给用 ...
- 只有一百行的xss扫描工具——DSXS源码分析
目录 0x00 废话 0x01 扫描逻辑 第一个逻辑:dom型xss 第二个逻辑:经过后端的xss 0x02 总结 0x00 废话 DSXS是一个只有一百行代码的xss扫描器,其作者刚好就是写sqlm ...
- 如何使用vs将asp.net core项目添加容器支持并发布docker镜像到私有dockerhub和添加k8s/helm管理
这篇文章介绍一下,如何使用VS2017给asp.net core添加容器支持,并发布镜像到私有docker hub,然后用chart管理容器镜像的操作流程. 话不多说,just do it. 新建项目 ...
- 常用的Java Keytool Keystore命令
Java keytool是密钥和证书管理工具.它使用户能够管理自己的公钥/私钥对及相关证书,用于(通过数字签名)自我认证(用户向别的用户/服务认证自己)或数据完整性以及认证服务.它还允许用户储存他们的 ...
- jqgrid postData post方式累加参数,缓存了原来的数据
今天做项目的时候发现一个问题,我们有一个筛选项,一个是VIP用户,一个是普通用户,还有一个是全部用户,首先看下我们的selection <select name="" id= ...
- Android-原笔迹手写的探索与开发
前言 这篇文章主要是关于移动端原笔迹的开发,让平板上的手写效果达到笔迹光滑且有笔锋. 介绍关于原笔迹的算法思路. 项目github地址 算法思路分析 曲线拟合算法 利用曲线拟合算法增加虚拟的点,使得 ...
- ubuntu安装mysql没有让我设置密码
终端输入: sudo cat /etc/mysql/debian.cnf显示内容:# Automatically generated for Debian scripts. DO NOT TOUCH! ...
- SQLServer多表联查,多表分页查询
多表联查: select p.*,s.Sheng , i.Shifrom [dbo].[ProductRecordInfo] --表名 p left join [ShengInfo] s on ...
- 多功能设备mfd驱动
一.概述 mfd是Multifunction device的简称,即多功能设备,是许多有共性的设备的集合,mfd由核心层(core)以及其下的"子设备"组成.从下文将会看到,mfd ...
- Windows Server 2016-启用默认Windows搜索服务
当我们使用Windows Server 2016尝试从开始菜单或基于Windows Server 2016的计算机上的Cortana 搜索时,我们不会收到任何结果或不一致的结果. 原因 默认情况下, ...