c# 委托实现异步回调是怎么一回事?
3个回答
展开全部
委托实现异步回调,
首先 就是 启动异步调用请求
及调用 SomeDelegate.BeginInvoke;
重点就在BeginInvoke 里面的最后的两个参数
倒数第二个 是 在 开始异步之后 需要执行的方法名
该方法要满足 委托类型 AsyncCallback 的参数 签名,也就是
返回值类型是 Void 空, 要传入一个 IAsyncResult 类型(是个接口) 或者实现该接口的 类型 的参数; 并且这个方法是 结束异步的方法,在其内部要调用 EndInvok 方法,释放资源,返回计算结果。
倒数第一个 参数 虽然是一个object类型的参数,可以传入任何类型,但是 是用来传入 启动异步调用的委托自身,方便 异步方法 (就是倒数第二个参数)访问。
具体的可以参照 C#高级编程 中第19章 Thread
MSDN :http://msdn.microsoft.com/zh-cn/library/2e08f6yc(v=VS.80).aspx
首先 就是 启动异步调用请求
及调用 SomeDelegate.BeginInvoke;
重点就在BeginInvoke 里面的最后的两个参数
倒数第二个 是 在 开始异步之后 需要执行的方法名
该方法要满足 委托类型 AsyncCallback 的参数 签名,也就是
返回值类型是 Void 空, 要传入一个 IAsyncResult 类型(是个接口) 或者实现该接口的 类型 的参数; 并且这个方法是 结束异步的方法,在其内部要调用 EndInvok 方法,释放资源,返回计算结果。
倒数第一个 参数 虽然是一个object类型的参数,可以传入任何类型,但是 是用来传入 启动异步调用的委托自身,方便 异步方法 (就是倒数第二个参数)访问。
具体的可以参照 C#高级编程 中第19章 Thread
MSDN :http://msdn.microsoft.com/zh-cn/library/2e08f6yc(v=VS.80).aspx
展开全部
义一个委托,该委托于你需要异步执行的方法的签名一定要一样,
另外 在定义委托时,还可以加上两个可选的参数
意思就是说
你的方法签名 public string TestMethod(int i)
你的委托这样 public delegate string AsyncMethod(int i);
在程序里面,你可以这样用
实例化你的委托:
// ad.TestMethod 假设TestMethod方法包含在一个ad的对象中
AsyncMethod caller = new AsyncMethod(ad.TestMethod);
IAsyncResult Result = caller.BeginInvoke(1,null/*回调*/,new StateObject() /*StateObject是你的对象*/);
这个你调用会返回IAsyncResult 对象 在上面 就是Result
你可以这样获得你的对象
Result.AsyncState 但是必须强制转换。
你可以在MSDN中看一下
另外 在定义委托时,还可以加上两个可选的参数
意思就是说
你的方法签名 public string TestMethod(int i)
你的委托这样 public delegate string AsyncMethod(int i);
在程序里面,你可以这样用
实例化你的委托:
// ad.TestMethod 假设TestMethod方法包含在一个ad的对象中
AsyncMethod caller = new AsyncMethod(ad.TestMethod);
IAsyncResult Result = caller.BeginInvoke(1,null/*回调*/,new StateObject() /*StateObject是你的对象*/);
这个你调用会返回IAsyncResult 对象 在上面 就是Result
你可以这样获得你的对象
Result.AsyncState 但是必须强制转换。
你可以在MSDN中看一下
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
委托相当于函数指针,如果你不懂C,当我没说
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询