정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

EventHandler<TEventArgs> 대리자

이벤트가 데이터를 제공할 때 이벤트를 처리할 메서드를 나타냅니다.

네임스페이스:  System
어셈블리:  mscorlib(mscorlib.dll)

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

형식 매개 변수

TEventArgs

이벤트에서 생성한 이벤트 데이터의 형식입니다.

매개 변수

sender
형식: System.Object
이벤트 소스입니다.
e
형식: TEventArgs
이벤트 데이터를 포함하는 개체입니다.

.NET Framework의 이벤트 모델은 이벤트와 이벤트 처리기를 연결하는 이벤트 대리자가 있다는 사실을 기초로 만들어졌습니다. 이벤트를 발생시키려면 다음과 같은 두 가지 요소가 필요합니다.

  • 이벤트에 응답하는 메서드를 참조하는 대리자입니다.

  • 이벤트 데이터를 제공 하는 경우 이벤트 데이터를 보유 하 고 필요한 경우는 클래스입니다.

대리자는 시그니처를 정의하는 형식, 즉 메서드에 대한 반환 값 형식과 매개 변수 목록 형식입니다. 대리자 형식을 사용하여 대리자와 같은 시그니처가 있는 모든 메서드를 참조하는 변수를 선언할 수 있습니다.

이벤트 처리기 대리자의 표준 시그니처에서 값을 반환 하지 않는 메서드를 정의 합니다. 이 메서드의 첫 번째 매개 변수 형식이 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; }
    }
}


.NET Framework

4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0에서 지원

.NET Framework Client Profile

4, 3.5 SP1에서 지원

이식 가능한 클래스 라이브러리

이식 가능한 클래스 라이브러리에서 지원

Windows 스토어 앱용 .NET

Windows 8에서 지원

Windows Phone 앱용 .NET

Windows Phone 8, Silverlight 8.1에서 지원

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(서버 코어 역할은 지원되지 않음), Windows Server 2008 R2(서버 코어 역할은 SP1 이상에서 지원, Itanium은 지원되지 않음)

.NET Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.

커뮤니티 추가 항목

표시:
© 2014 Microsoft