关于事件Event的说明
Posted Lanny Priest
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于事件Event的说明相关的知识,希望对你有一定的参考价值。
经测试,事件本身是同步的,事件注册的方法也是同步依次执行。并不能异步执行。当注册方法自身为异步方法时,产生异步的效果。
在MSDN中提到的使用基于事件的异步模型进行多线程编程也不是想象中那么简单(自动异步执行)。
下面的例子中,同步方法是依次执行的,事件也在同步方法执行完毕后结束,异步启动时刻也是同步的。
调用方法为 new demo().DemoTest();
public class demo
{
public delegate void DemoEventHandler();
public event DemoEventHandler eve;
public void DemoTest()
{
DemoEventHandler sync = new DemoEventHandler(SyncFunc);
DemoEventHandler sync2 = new DemoEventHandler(SyncFunc2);
DemoEventHandler asyc = new DemoEventHandler(AsycFunc);
eve += sync;
eve += sync2;
eve += asyc;
System.Console.WriteLine(System.DateTime.Now.ToString("HH:mm:ss fff") +" event start.");
eve();
System.Console.WriteLine(System.DateTime.Now.ToString("HH:mm:ss fff") + " event end.");
}
private void SyncFunc()
{
System.Console.WriteLine(System.DateTime.Now.ToString("HH:mm:ss fff") + " sync start.");
System.Threading.Thread.Sleep(1000);
System.Console.WriteLine(System.DateTime.Now.ToString("HH:mm:ss fff") + " sync end.");
}
private void SyncFunc2()
{
System.Console.WriteLine(System.DateTime.Now.ToString("HH:mm:ss fff") + " sync2 start.");
System.Threading.Thread.Sleep(2000);
System.Console.WriteLine(System.DateTime.Now.ToString("HH:mm:ss fff") + " sync2 end.");
}
private void AsycFunc()
{
System.Console.WriteLine(System.DateTime.Now.ToString("HH:mm:ss fff") + " asyc start.");
DemoEventHandler func = delegate()
{
System.Threading.Thread.Sleep(1000);
System.Console.WriteLine(System.DateTime.Now.ToString("HH:mm:ss fff") + " asyc end.");
};
func.BeginInvoke(null, null);
}
}
--- Lan ([email protected])
以上是关于关于事件Event的说明的主要内容,如果未能解决你的问题,请参考以下文章
使用addEventListener绑定事件是关于this和event记录
spring boot: 一般注入说明 @Component, application event事件为Bean与Bean之间通信提供了支持