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 ...
随机推荐
- HashMap和LinkedHashMap的区别
参考:https://blog.csdn.net/a822631129/article/details/78520111 java为数据结构中的映射定义了一个接口java.util.Map;它有四个实 ...
- 【构造】Bzoj1432[ZJOI2009]Function
Description Input 一行两个整数n; k. Output 一行一个整数,表示n 个函数第k 层最少能由多少段组成. Sample Input 1 1 Sample Output 1 ...
- 搞定! iTunes 不能添加铃声进去
最近换个新铃声,但转换成.m4r 怎么都拖不到铃声里很莫名奇妙,首先确定苹果是允许自己定义铃声的,然后网上查了不少文章,都无济于事所以我想自己记录下自己成功搞定的方法,供各位参考第一步: 把自己想转为 ...
- zookeeper基本命令
集群角色: Leader:客户端提供读和写服务 Follower:提供读服务,所有写服务都需要转交给Leader角色,参与选举 Observer:只提供读服务,不参与选举过程,一般是为了增强zk集群的 ...
- 教你如何使用Java手写一个基于链表的队列
在上一篇博客[教你如何使用Java手写一个基于数组的队列]中已经介绍了队列,以及Java语言中对队列的实现,对队列不是很了解的可以我上一篇文章.那么,现在就直接进入主题吧. 这篇博客主要讲解的是如何使 ...
- 重磅!!!微软发布ASP.NET Core 2.2,先睹为快。
我很高兴地宣布ASP.NET Core 2.2现在作为.NET Core 2.2的一部分提供! 如何获取? 您可以从.NET Core 2.2下载页面下载适用于您的开发机器和构建服务器的新.NET C ...
- Spark学习之编程进阶总结(二)
五.基于分区进行操作 基于分区对数据进行操作可以让我们避免为每个数据元素进行重复的配置工作.诸如打开数据库连接或创建随机数生成器等操作,都是我们应当尽量避免为每个元素都配置一次的工作.Spark 提供 ...
- HashMap?面试?我是谁?我在哪
现在是晚上11点了,学校屠猪馆的自习室因为太晚要关闭了,勤奋且疲惫的小鲁班也从屠猪馆出来了,正准备回宿舍洗洗睡,由于自习室位置比较偏僻所以是接收不到手机网络信号的,因此小鲁班从兜里掏出手机的时候,信息 ...
- Java进阶篇设计模式之十 ---- 访问者模式和中介者模式
前言 在上一篇中我们学习了行为型模式的解释器模式(Interpreter Pattern)和迭代器模式(Iterator Pattern).本篇则来学习下行为型模式的两个模式,访问者模式(Visito ...
- SpringCloud-服务注册与发现(注册中心)
SpringCloud-服务注册与发现(注册中心) 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 注:作者使用IDEA + Gradle 注:需要有一定的java&& ...