不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
BeginInvoke和EndInvoke方法学习小结
编辑:dnawo 日期:2014-08-17
BeginInvoke和EndInvoke的作用是把一个同步方法改成异步执行,改造过程主要有3步:
·增加一个与方法对应的委托;
·增加一个AsyncCallback委托类型的回调函数(在函数体调用EndInvoke获取返回值);
·将方法的参数、回调函数和委托变量传给BeginInvoke;
下面是一个简单的示例:
参考很多类异步方法命名方式BeginXXX和EndXXX,对上面类稍做修改:
BeginTodo方法返回类型为IAsyncResult,网上看到有人这么调用:
·增加一个与方法对应的委托;
·增加一个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);
}
}
{
/// <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();
}
}
{
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();
}
{
Test test = new Test();
IAsyncResult result = test.BeginTodo(2, 3, null, null);
Console.WriteLine(test.EndTodo(result));
Console.ReadKey();
}






评论: 0 | 引用: 0 | 查看次数: 2868
发表评论
请登录后再发表评论!