EventHandler(TEventArgs) 委派
TOC
摺疊目錄
展開目錄
本文為機器翻譯文章。如需檢視英文版,請選取 [原文] 核取方塊。您也可以將滑鼠指標移到文字上,即可在快顯視窗顯示英文原文。
譯文
原文

EventHandler<TEventArgs> 委派

 
clsCompliantAlternativeT:System.EventHandler

代表事件提供資料時處理事件的方法。

命名空間:   System
組件:  mscorlib (在 mscorlib.dll 中)

[SerializableAttribute]
public delegate void EventHandler<TEventArgs>(
	object sender,
	TEventArgs e
)

參數

sender

事件的來源。

e
Type: TEventArgs

包含事件資料的物件。

類型參數

TEventArgs

此事件所產生的事件資料型別。

在 .NET Framework 中的事件模型是根據連接事件和其處理常式 (Handler) 的事件委派 (Delegate) 的出現。若要引發事件,有兩個項目是必須的:

  • 參考提供回應給事件方法的委派。

  • 或者,保留事件資料的類別,則為,如果事件提供資料。

委派是一種定義簽章的型別,簽章指的就是方法的傳回值型別和參數清單型別。 您可以使用委派型別 (Delegate Type) 宣告變數,這個變數可以參考和委派有著相同簽章的任何方法。

事件處理常式委派的標準簽章定義不會傳回值的方法。這個方法的第一個參數屬於型別 Object 並參考引發事件的執行個體。它的第二個參數從型別衍生自 EventArgs 並保留事件資料。如果事件不會產生事件資料,第二個參數是 EventArgs.Empty 欄位的值。否則,第二個參數是衍生自 EventArgs 的型別並提供所需的任何欄位或屬性保留事件資料。

EventHandler<TEventArgs> 委派所表示事件的事件處理常式方法產生資料的預先定義委派。使用 EventHandler<TEventArgs> 的優點為,如果事件會產生事件資料,則您不必編碼自己的自訂委派。您的事件資料物件的型別為泛型參數。

若要將事件與將處理事件的方法產生關聯,可將委派的執行個體加入至事件。除非您移除委派,否則每當事件發生時便會呼叫事件處理常式。

如需事件處理常式委派的詳細資訊,請參閱處理和引發事件

下列範例顯示一個名為 ThresholdReached的方法。事件與 EventHandler<TEventArgs> 委派。

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Counter c = new Counter(new Random().Next(10));
            c.ThresholdReached += c_ThresholdReached;

            Console.WriteLine("press 'a' key to increase total");
            while (Console.ReadKey(true).KeyChar == 'a')
            {
                Console.WriteLine("adding one");
                c.Add(1);
            }
        }

        static void c_ThresholdReached(object sender, ThresholdReachedEventArgs e)
        {
            Console.WriteLine("The threshold of {0} was reached at {1}.", e.Threshold,  e.TimeReached);
            Environment.Exit(0);
        }
    }

    class Counter
    {
        private int threshold;
        private int total;

        public Counter(int passedThreshold)
        {
            threshold = passedThreshold;
        }

        public void Add(int x)
        {
            total += x;
            if (total >= threshold)
            {
                ThresholdReachedEventArgs args = new ThresholdReachedEventArgs();
                args.Threshold = threshold;
                args.TimeReached = DateTime.Now;
                OnThresholdReached(args);
            }
        }

        protected virtual void OnThresholdReached(ThresholdReachedEventArgs e)
        {
            EventHandler<ThresholdReachedEventArgs> handler = ThresholdReached;
            if (handler != null)
            {
                handler(this, e);
            }
        }

        public event EventHandler<ThresholdReachedEventArgs> ThresholdReached;
    }

    public class ThresholdReachedEventArgs : EventArgs
    {
        public int Threshold { get; set; }
        public DateTime TimeReached { get; set; }
    }
}

Universal Windows Platform
自 4.5 起可用
.NET Framework
自 2.0 起可用
Portable Class Library
支援版本:portable .NET platforms
Silverlight
自 2.0 起可用
Windows Phone Silverlight
自 7.0 起可用
Windows Phone
自 8.1 起可用
回到頁首
顯示:
© 2016 Microsoft