转自:http://cdlgdxgcjsxy2.blog.163.com/blog/static/16936188720105140195591/
BeginInvoke()方法前部分的参数是用来给调用它的委托对象所代理的那个方法传递参数,最后两个参数中,第一个是用来声明回调函数的方法名,第二个参数@object是 "传递额外的参数",因为他本身是Object对象,我们可以传递任何对象。
举个例子:
Code
1class Program
2{
3 static void Main(string[] args)
4 {
5 AsyncTest test = new AsyncTest();
6 SalaryEventHandler dele = test.YearlySalary;
7
8 //异步方法开始执行,看最后一个参数(Object对象) [Note1:],这里我们传递2000(int)
9 dele.BeginInvoke(100000, 15, 100000, GetResultCallBack, 2000);
10
11 Console.ReadLine(); // 让黑屏等待,不会直接关闭..
12 }
13
14 static void GetResultCallBack(IAsyncResult asyncResult)
15 {
16
17 //获取原始的委托对象
18 AsyncResult result = (AsyncResult)asyncResult;
19 SalaryEventHandler salDel = (SalaryEventHandler)result.AsyncDelegate;
20
21 //调用EndInvoke获取返回值
22 object val = salDel.EndInvoke(asyncResult);
23 //[Note1:],他的作用就是来 "传递额外的参数",因为他本身是Object对象,我们可以传递任何对象
24 //int para = (int)asyncResult.AsyncState;
25 //Console.WriteLine(para); //输出:2000
26 }
27}