欢迎光临

木子屋

标题: BeginInvoke和EndInvoke方法学习小结

作者: dnawo

日期: 2014-08-17 11:32 PM

分类: Win编程

内容: BeginInvoke和EndInvoke的作用是把一个同步方法改成异步执行，改造过程主要有3步：
·增加一个与方法对应的委托；
·增加一个AsyncCallback委托类型的回调函数(在函数体调用EndInvoke获取返回值)；
·将方法的参数、回调函数和委托变量传给BeginInvoke；
下面是一个简单的示例：
复制内容到剪贴板 程序代码public class Test
{
/// <summary>
/// 原始方法
/// </summary>
/// <returns></returns>
private int Todo()
{
return 100;
}
/// <summary>
/// 增加方法对应的委托
/// </summary>
/// <returns></returns>
delegate int TodoHandler();
/// <summary>
/// 增加AsyncCallback委托类型的回调函数
/// </summary>
/// <param name="ar"></param>
private void TodoCallback(IAsyncResult ar)
{
TodoHandler handler = (TodoHandler)ar.AsyncState;
Console.WriteLine(handler.EndInvoke(ar));
}
/// <summary>
/// 调用示例
/// </summary>
public void InvokeTest()
{
TodoHandler handler = new TodoHandler(Todo);
handler.BeginInvoke(TodoCallback, handler);
}
}
参考很多类异步方法命名方式BeginXXX和EndXXX，对上面类稍做修改：
复制内容到剪贴板 程序代码public class Test
{
public int Todo(int a, int b)
{
return a + b;
}
private delegate int TodoHandler(int a, int b);
private TodoHandler _todo = null;
public Test()
{
_todo = Todo;
}
public IAsyncResult BeginTodo(int a, int b, AsyncCallback callback, object state)
{
return _todo.BeginInvoke(a, b, callback, state);
}
public int EndTodo(IAsyncResult ar)
{
return _todo.EndInvoke(ar);
}
}
public class Program
{
static void TodoCallback(IAsyncResult ar)
{
Test test = (Test)ar.AsyncState;
Console.WriteLine(test.EndTodo(ar));
}
static public void Main(string[] args)
{
Test test = new Test();
test.BeginTodo(2, 3, TodoCallback, test);
Console.ReadKey();
}
}
BeginTodo方法返回类型为IAsyncResult，网上看到有人这么调用：
复制内容到剪贴板 程序代码static public void Main(string[] args)
{
Test test = new Test();
IAsyncResult result = test.BeginTodo(2, 3, null, null);
Console.WriteLine(test.EndTodo(result));
Console.ReadKey();
}

+ 查看当前日志评论 (0)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.162 ms

返回

标题: BeginInvoke和EndInvoke方法学习小结

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.162 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 1.193 ms

返回