- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading;
- namespace AsyncInvokeDemo
- {
- public class AsyncInvokeProxy<T1>
- {
- private Action<T1> _task;
- public AsyncInvokeProxy(Action<T1> task)
- {
- this._task = task;
- }
- public void BeginEnvoke<T2>(T1 args, Action<T2, Exception> cb, T2 cbArgs)
- {
- this._task.BeginInvoke(args, new AsyncCallback((r) =>
- {
- try
- {
- cb(cbArgs, null);
- this._task.EndInvoke(r);
- }
- catch (Exception ex)
- {
- cb(cbArgs, ex);
- }
- }), cbArgs);
- }
- }
- }
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace AsyncInvokeDemo
- {
- class Program
- {
- static void Main(string[] args)
- {
- Action<A> test = (a) =>
- {
- Console.WriteLine("start to invoke");
- for (int i = 0; i < 1000; i++)
- {
- Console.WriteLine(i);
- }
- Console.WriteLine("invoke args aint : {0},astr: {1} ", a.aInt, a.aStr);
- };
- AsyncInvokeProxy<A> proxy = new AsyncInvokeProxy<A>(test);
- proxy.BeginEnvoke<B>(new A { aInt = 1, aStr = "astr" }, (b, ex) =>
- {
- if (ex != null)
- {
- }
- Console.WriteLine("callback ret bint: {0},bstr: {1}", b.bInt, b.bStr);
- }, new B { bInt = 2, bStr = "bstr" });
- Console.ReadLine();
- }
- }
- }
来源: http://www.phpxs.com/code/1004386/