.NET C#-- 利用BeginInvoke与EndInvoke完成异步委托方法并获取方法执行返回值示例

//定义委托       
 delegate string MyDelegate(string name);

//定义委托调用函数
         public string Hello(string name)
         {
             Thread.Sleep(10000);            //虚拟异步工作
             return "Hello " + name;
         }


//以下调用并获取返回值

        private void Form1_Load(object sender, EventArgs e)
        {
            //建立委托
             MyDelegate myDelegate = new MyDelegate(Hello);
             //异步调用委托,获取委托执行函数返回的执行结果
             IAsyncResult result=myDelegate.BeginInvoke("Leslie", null, null);

            //定义一个变量接收委托函数执行的返回结果
            string data="";
            
            //判断如果异步执行是否完
            while (result.IsCompleted==false)
            {
                Thread.Sleep(20);
               
            }
             
            //如果异步函数执行完成则获取返回结果
            data = myDelegate.EndInvoke(result);
        }

 IAsyncResult的相关说明:

public interface IAsyncResult
{
object AsyncState {get;} //获取用户定义的对象,它限定或包含关于异步操作的信息。
WailHandle AsyncWaitHandle {get;} //获取用于等待异步操作完成的 WaitHandle。
bool CompletedSynchronously {get;} //获取异步操作是否同步完成的指示。
bool IsCompleted {get;} //获取异步操作是否已完成的指示。
}

posted @ 2017-01-07 16:40  奔跑.Ken  阅读(3479)  评论(0编辑  收藏  举报