【読書ノート】イベントイベントイベント

2755 ワード

 , 。
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;



namespace Event

{

    class Program

    {

        static void Main(string[] args)

        {

            LongTask It = new LongTask();

            It.OnNotifyProgress += new LongTask.NotifyProgressDelegate(It_OnNotifyProgress);



            It.PerformTask();



            Console.ReadLine();            

        }



        static void It_OnNotifyProgress(ProgressArgs pa)

        {

            Console.WriteLine("Progress on Long Task Complete. {0}% Complete.", pa.PercentComplete);

        

        }

    }



    class LongTask

    {

        public delegate void NotifyProgressDelegate(ProgressArgs pa); // Declare a delegate



        public event NotifyProgressDelegate OnNotifyProgress; // Create an event



        public void PerformTask()

        {

            for (int i = 0; i < 10000; i++)

            {

                //Perform some processing

                //...



                //notify subscribers that progress was made

                if (i % 100 == 0)

                {

                    OnNotifyProgress(new ProgressArgs((int)i / 100));

                }

            }

        }

    }



    class ProgressArgs

    {

        public int PercentComplete;



        public ProgressArgs(int pctComplete)

        {

            PercentComplete = pctComplete;

        }

    }



}




イベントの概要


イベントには次の機能があります.
  • 発行者は、イベントがいつ開始されるかを決定し、サブスクライバは、イベントに応答するためにどのような操作を実行するかを決定する.
  • イベントには、複数のサブスクライバが存在してもよい.1つのサブスクライバは、複数の発行者からの複数のイベントを処理することができる.
  • サブスクライバがいないイベントは、いつまでも呼び出されません.
  • イベントは、通常、ユーザに操作を通知するために使用される(例えば、グラフィックユーザインタフェースのボタンクリックまたはメニュー選択操作).
  • イベントに複数のサブスクライバがある場合、イベントが開始されると、複数のイベントハンドラが同期して呼び出されます.イベントを非同期で呼び出すには、同期メソッドを非同期で呼び出すを参照してください.
  • は、イベント同期スレッドを利用することができる.
  • 在.NET Frameworkクラスライブラリでは、イベントはEventHandler依頼とEventArgsベースクラスに基づいています.