1Delegate中的异步调用_回调函数namespace Bingosoft.Training2007.CSharp

 2Delegate中的异步调用_回调函数_02Delegate中的异步调用_异步调用_03Delegate中的异步调用_其他_04{

 3Delegate中的异步调用_回调函数_05    delegate int Sum(int num1,int num2);

 4Delegate中的异步调用_其他_06Delegate中的异步调用_ico_07    /**//// <summary>

 5Delegate中的异步调用_回调函数_05    /// 使用Delegate的BeginInvoke方法完成一个函数的异步调用过程。

 6Delegate中的异步调用_回调函数_09     /// </summary>

 7Delegate中的异步调用_回调函数_05    class Question6

 8Delegate中的异步调用_其他_06Delegate中的异步调用_ico_07    Delegate中的异步调用_其他_04{

 9Delegate中的异步调用_其他_06Delegate中的异步调用_ico_07        /**//// <summary>

10Delegate中的异步调用_回调函数_05        /// 求两个int型数的和(仅供演示)

11Delegate中的异步调用_回调函数_05        /// </summary>

12Delegate中的异步调用_回调函数_05        /// <param name="num1"></param>

13Delegate中的异步调用_回调函数_05        /// <param name="num2"></param>

14Delegate中的异步调用_回调函数_09        /// <returns></returns>

15Delegate中的异步调用_回调函数_05        public static int GetSum(int num1, int num2)

16Delegate中的异步调用_其他_06Delegate中的异步调用_ico_07        Delegate中的异步调用_其他_04{

17Delegate中的异步调用_回调函数_05            Thread.Sleep(1000);

18Delegate中的异步调用_回调函数_05            return num1 + num2;            

19Delegate中的异步调用_回调函数_09        } 

20Delegate中的异步调用_回调函数_05

21Delegate中的异步调用_其他_06Delegate中的异步调用_ico_07        /**//// <summary>

22Delegate中的异步调用_回调函数_05        /// 用EndInvoke等待异步调用

23Delegate中的异步调用_回调函数_09         /// </summary>

24Delegate中的异步调用_回调函数_05        public static void TestAsyn1()

25Delegate中的异步调用_其他_06Delegate中的异步调用_ico_07        Delegate中的异步调用_其他_04{

26Delegate中的异步调用_回调函数_05            Sum sum = new Sum(GetSum);

27Delegate中的异步调用_回调函数_05            IAsyncResult result = sum.BeginInvoke(10, 20,null,null);

28Delegate中的异步调用_回调函数_05            Console.WriteLine("计算中Delegate中的异步调用_其他_04Delegate中的异步调用_其他_04");

29Delegate中的异步调用_回调函数_05            int returnVal = sum.EndInvoke(result);

30Delegate中的异步调用_回调函数_05            Console.WriteLine(returnVal);

31Delegate中的异步调用_回调函数_09        } 

32Delegate中的异步调用_回调函数_05

33Delegate中的异步调用_其他_06Delegate中的异步调用_ico_07        /**//// <summary>

34Delegate中的异步调用_回调函数_05        /// 用WaitHandle等待异步调用

35Delegate中的异步调用_回调函数_09         /// </summary>

36Delegate中的异步调用_回调函数_05        public static void TestAsyn2()

37Delegate中的异步调用_其他_06Delegate中的异步调用_ico_07        Delegate中的异步调用_其他_04{

38Delegate中的异步调用_回调函数_05            Sum sum = new Sum(GetSum);

39Delegate中的异步调用_回调函数_05            IAsyncResult result = sum.BeginInvoke(10, 20, null, null);

40Delegate中的异步调用_回调函数_05            result.AsyncWaitHandle.WaitOne();

41Delegate中的异步调用_回调函数_05            Console.WriteLine("计算完毕:");

42Delegate中的异步调用_回调函数_05            int returnVal = sum.EndInvoke(result);

43Delegate中的异步调用_回调函数_05            Console.WriteLine(returnVal);

44Delegate中的异步调用_回调函数_09        } 

45Delegate中的异步调用_回调函数_05

46Delegate中的异步调用_其他_06Delegate中的异步调用_ico_07        /**//// <summary>

47Delegate中的异步调用_回调函数_05        /// 轮训查询等待异步调用

48Delegate中的异步调用_回调函数_09         /// </summary>

49Delegate中的异步调用_回调函数_05        public static void TestAsyn3()

50Delegate中的异步调用_其他_06Delegate中的异步调用_ico_07        Delegate中的异步调用_其他_04{

51Delegate中的异步调用_回调函数_05            Sum sum = new Sum(GetSum);

52Delegate中的异步调用_回调函数_05            IAsyncResult result = sum.BeginInvoke(10, 20, null, null);

53Delegate中的异步调用_回调函数_05            while (!result.IsCompleted)

54Delegate中的异步调用_其他_06Delegate中的异步调用_ico_07            Delegate中的异步调用_其他_04{

55Delegate中的异步调用_回调函数_05                Console.WriteLine("计算中Delegate中的异步调用_其他_04");

56Delegate中的异步调用_回调函数_09            }

57Delegate中的异步调用_回调函数_05            int returnVal = sum.EndInvoke(result);

58Delegate中的异步调用_回调函数_05            Console.WriteLine(returnVal);

59Delegate中的异步调用_回调函数_09        } 

60Delegate中的异步调用_回调函数_05

61Delegate中的异步调用_其他_06Delegate中的异步调用_ico_07        /**//// <summary>

62Delegate中的异步调用_回调函数_05        /// 异步调用完成后,执行回调

63Delegate中的异步调用_回调函数_09         /// </summary>

64Delegate中的异步调用_回调函数_05        public static void TestAsyn4()

65Delegate中的异步调用_其他_06Delegate中的异步调用_ico_07        Delegate中的异步调用_其他_04{

66Delegate中的异步调用_回调函数_05            Sum sum = new Sum(GetSum);

67Delegate中的异步调用_回调函数_05            IAsyncResult result = sum.BeginInvoke(10, 20, new AsyncCallback(Question6.CallBackAsyn), sum);

68Delegate中的异步调用_回调函数_05            Console.WriteLine("计算中Delegate中的异步调用_其他_04");

69Delegate中的异步调用_回调函数_09        } 

70Delegate中的异步调用_回调函数_05

71Delegate中的异步调用_其他_06Delegate中的异步调用_ico_07        /**//// <summary>

72Delegate中的异步调用_回调函数_05        /// 回调函数

73Delegate中的异步调用_回调函数_05         /// </summary>

74Delegate中的异步调用_回调函数_09        /// <param name="ar"></param>

75Delegate中的异步调用_回调函数_05        public static void CallBackAsyn(IAsyncResult ar)

76Delegate中的异步调用_其他_06Delegate中的异步调用_ico_07        Delegate中的异步调用_其他_04{

77Delegate中的异步调用_回调函数_05            Sum sum = (Sum)ar.AsyncState;

78Delegate中的异步调用_回调函数_05            int returnVal = sum.EndInvoke(ar);

79Delegate中的异步调用_回调函数_05            MessageBox.Show(returnVal.ToString(), "计算结果:", MessageBoxButtons.OK, MessageBoxIcon.Information);

80Delegate中的异步调用_回调函数_09        }

81Delegate中的异步调用_回调函数_09    }

82Delegate中的异步调用_ico_111}

83Delegate中的异步调用_回调函数 

84Delegate中的异步调用_回调函数

85Delegate中的异步调用_回调函数//测试Question6

86Delegate中的异步调用_回调函数Question6.TestAsyn1();

87Delegate中的异步调用_回调函数Question6.TestAsyn2();

88Delegate中的异步调用_回调函数Question6.TestAsyn3();

89Delegate中的异步调用_回调函数Question6.TestAsyn4();

90Delegate中的异步调用_回调函数Console.WriteLine("Press any Key to ContinueDelegate中的异步调用_其他_04");

91Delegate中的异步调用_回调函数Console.ReadLine();

92Delegate中的异步调用_回调函数