關於事件Event的說明
阿新 • • 發佈:2017-08-25
例子 想象 thread 異步執行 sof ros 自動 執行 註冊
下面的例子中,同步方法是依次執行的,事件也在同步方法執行完畢後結束,異步啟動時刻也是同步的。 調用方法為 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])
經測試,事件本身是同步的,事件註冊的方法也是同步依次執行。並不能異步執行。當註冊方法自身為異步方法時,產生異步的效果。
在MSDN中提到的使用基於事件的異步模型進行多線程編程也不是想象中那麽簡單(自動異步執行)。下面的例子中,同步方法是依次執行的,事件也在同步方法執行完畢後結束,異步啟動時刻也是同步的。 調用方法為 new demo().DemoTest();
public class demo { public delegate void DemoEventHandler(); public event DemoEventHandler eve; public void DemoTest()
--- Lan ([email protected])
關於事件Event的說明