此页面有用吗?
您对此内容的反馈非常重要。 请告诉我们您的想法。
更多反馈?
1500 个剩余字符
EventHandler(TEventArgs) 委托
Collapse the table of content
Expand the table of content
此文章由机器翻译。 将光标移到文章的句子上,以查看原文。 更多信息。
译文
原文

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 系统要求

社区附加资源

添加
Microsoft 正在进行一项网上调查,以了解您对 MSDN 网站的意见。 如果您选择参加,我们将会在您离开 MSDN 网站时向您显示该网上调查。

是否要参加?
显示:
© 2015 Microsoft