using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Remoting.Messaging;
using System.Text;
using System.Threading;
namespace 委托和异步方法
{
public delegate int AddDelegate(int x ,int y);
public class Program
{
//执行回调方法的线程并非客户端线程Main Thread
public static void onAddCom(IAsyncResult asyncResult) {
AsyncResult result = (AsyncResult)asyncResult;
AddDelegate del= (AddDelegate)result.AsyncDelegate;
string data = (string)asyncResult.AsyncState;
int rtn =del.EndInvoke(asyncResult);
Console.WriteLine("{0}: Result, {1}; Data: {2} ",
Thread.CurrentThread.Name, rtn, data);
}
static void Main(string[] args)
{
Console.WriteLine("Client application started! ");
Thread.CurrentThread.Name = "Main Thread";
Calculator cal = new Calculator();
AddDelegate del = new AddDelegate(cal.add);
//同步调用
int result= (int)del.DynamicInvoke(new object[] { 1, 2 });
Console.WriteLine("DynamicInvoke Result: {0}", result);
AsyncCallback callback = new AsyncCallback(onAddCom);
//异步调用
IAsyncResult asyncResult = del.BeginInvoke(1, 2, callback, "This is a data string");
for (int i = 1; i <= 3; i++)
{
Thread.Sleep(TimeSpan.FromSeconds(i));
Console.WriteLine("{0}: Client executed {1} second(s).",
Thread.CurrentThread.Name, i);
}
Console.WriteLine(" Press any key to exit...");
Console.ReadKey();
}
}
}