天天看點

Delegate中的異步調用

 1

Delegate中的異步調用

namespace Bingosoft.Training2007.CSharp

 2

Delegate中的異步調用
Delegate中的異步調用
Delegate中的異步調用

{

 3

Delegate中的異步調用

    delegate int Sum(int num1,int num2);

 4

Delegate中的異步調用
Delegate中的異步調用

    /**//// <summary>

 5

Delegate中的異步調用

    /// 使用Delegate的BeginInvoke方法完成一個函數的異步調用過程。

 6

Delegate中的異步調用

     /// </summary>

 7

Delegate中的異步調用

    class Question6

 8

Delegate中的異步調用
Delegate中的異步調用
Delegate中的異步調用

 9

Delegate中的異步調用
Delegate中的異步調用

        /**//// <summary>

10

Delegate中的異步調用

        /// 求兩個int型數的和(僅供示範)

11

Delegate中的異步調用

        /// </summary>

12

Delegate中的異步調用

        /// <param name="num1"></param>

13

Delegate中的異步調用

        /// <param name="num2"></param>

14

Delegate中的異步調用

        /// <returns></returns>

15

Delegate中的異步調用

        public static int GetSum(int num1, int num2)

16

Delegate中的異步調用
Delegate中的異步調用
Delegate中的異步調用

17

Delegate中的異步調用

            Thread.Sleep(1000);

18

Delegate中的異步調用

            return num1 + num2;            

19

Delegate中的異步調用

        } 

20

Delegate中的異步調用

21

Delegate中的異步調用
Delegate中的異步調用

22

Delegate中的異步調用

        /// 用EndInvoke等待異步調用

23

Delegate中的異步調用

         /// </summary>

24

Delegate中的異步調用

        public static void TestAsyn1()

25

Delegate中的異步調用
Delegate中的異步調用
Delegate中的異步調用

26

Delegate中的異步調用

            Sum sum = new Sum(GetSum);

27

Delegate中的異步調用

            IAsyncResult result = sum.BeginInvoke(10, 20,null,null);

28

Delegate中的異步調用

            Console.WriteLine("計算中

Delegate中的異步調用
Delegate中的異步調用

");

29

Delegate中的異步調用

            int returnVal = sum.EndInvoke(result);

30

Delegate中的異步調用

            Console.WriteLine(returnVal);

31

Delegate中的異步調用

32

Delegate中的異步調用

33

Delegate中的異步調用
Delegate中的異步調用

34

Delegate中的異步調用

        /// 用WaitHandle等待異步調用

35

Delegate中的異步調用

36

Delegate中的異步調用

        public static void TestAsyn2()

37

Delegate中的異步調用
Delegate中的異步調用
Delegate中的異步調用

38

Delegate中的異步調用

39

Delegate中的異步調用

            IAsyncResult result = sum.BeginInvoke(10, 20, null, null);

40

Delegate中的異步調用

            result.AsyncWaitHandle.WaitOne();

41

Delegate中的異步調用

            Console.WriteLine("計算完畢:");

42

Delegate中的異步調用

43

Delegate中的異步調用

44

Delegate中的異步調用

45

Delegate中的異步調用

46

Delegate中的異步調用
Delegate中的異步調用

47

Delegate中的異步調用

        /// 輪訓查詢等待異步調用

48

Delegate中的異步調用

49

Delegate中的異步調用

        public static void TestAsyn3()

50

Delegate中的異步調用
Delegate中的異步調用
Delegate中的異步調用

51

Delegate中的異步調用

52

Delegate中的異步調用

53

Delegate中的異步調用

            while (!result.IsCompleted)

54

Delegate中的異步調用
Delegate中的異步調用
Delegate中的異步調用

55

Delegate中的異步調用

                Console.WriteLine("計算中

Delegate中的異步調用

56

Delegate中的異步調用

            }

57

Delegate中的異步調用

58

Delegate中的異步調用

59

Delegate中的異步調用

60

Delegate中的異步調用

61

Delegate中的異步調用
Delegate中的異步調用

62

Delegate中的異步調用

        /// 異步調用完成後,執行回調

63

Delegate中的異步調用

64

Delegate中的異步調用

        public static void TestAsyn4()

65

Delegate中的異步調用
Delegate中的異步調用
Delegate中的異步調用

66

Delegate中的異步調用

67

Delegate中的異步調用

            IAsyncResult result = sum.BeginInvoke(10, 20, new AsyncCallback(Question6.CallBackAsyn), sum);

68

Delegate中的異步調用
Delegate中的異步調用

69

Delegate中的異步調用

70

Delegate中的異步調用

71

Delegate中的異步調用
Delegate中的異步調用

72

Delegate中的異步調用

        /// 回調函數

73

Delegate中的異步調用

74

Delegate中的異步調用

        /// <param name="ar"></param>

75

Delegate中的異步調用

        public static void CallBackAsyn(IAsyncResult ar)

76

Delegate中的異步調用
Delegate中的異步調用
Delegate中的異步調用

77

Delegate中的異步調用

            Sum sum = (Sum)ar.AsyncState;

78

Delegate中的異步調用

            int returnVal = sum.EndInvoke(ar);

79

Delegate中的異步調用

            MessageBox.Show(returnVal.ToString(), "計算結果:", MessageBoxButtons.OK, MessageBoxIcon.Information);

80

Delegate中的異步調用

        }

81

Delegate中的異步調用

    }

82

Delegate中的異步調用

}

83

Delegate中的異步調用

84

Delegate中的異步調用

85

Delegate中的異步調用

//測試Question6

86

Delegate中的異步調用

Question6.TestAsyn1();

87

Delegate中的異步調用

Question6.TestAsyn2();

88

Delegate中的異步調用

Question6.TestAsyn3();

89

Delegate中的異步調用

Question6.TestAsyn4();

繼續閱讀