参考1

<a href="http://msdn.microsoft.com/en-us/library/system.iasyncresult.aspxhttp://hi.baidu.com/baixiaoxu/blog/item/a6119c285207c6f398250a6b.html">

http://msdn.microsoft.com/en-us/library/system.iasyncresult.aspxhttp://hi.baidu.com/baixiaoxu/blog/item/a6119c285207c6f398250a6b.html

</a>

http://msdn.microsoft.com/zh-cn/library/system.iasyncresult(v=vs.80).aspx

通过异步的方式防止界面死掉

1.使用 backgrounderworker 

2.IAsyncResult

本来是 学习EnterpriseLibrary Logger模块 看看事例觉得 IAsyncResult 没有学好 很生回味一遍 

以此为记。

总结不出新的东西。

具体模型就是:

1 定义委托:public delegate string AsyncMethodCaller(int callDuration, out int threadId);

2.实例化 关联方法(那些操作耗时的方法)   AsyncMethodCaller asyCaller = new AsyncMethodCaller(ad.TestMethod);

3.委托调用: BeginInvoke()  IAsyncResult result = asyCaller.BeginInvoke(2000, out threadId, null, null);

4. 调用结束 :EndInvoke()string returnValue = asyCaller.EndInvoke(out threadId, result);

5.关闭释放  result.AsyncWaitHandle.Close();

--------------

1. 中间还可以判断是否 完成result.IsComplete; 术语叫做轮询

2.是否等另外一个异步完成 result.AsyncWaitHandle.WaitOne();

-------------------------------------

可以直接执行回调函数 

 AsyncMethodCaller asyCaller = new AsyncMethodCaller(ad.TestMethod);
asyCaller.BeginInvoke(new AsyncCallback(c.CallbackMethod),asy);