EventHandler<TEventArgs> Delegera
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Representerar den metod som hanterar en händelse när händelsen tillhandahåller data.
generic <typename TEventArgs>
public delegate void EventHandler(System::Object ^ sender, TEventArgs e);
generic <typename TEventArgs>
where TEventArgs : EventArgspublic delegate void EventHandler(System::Object ^ sender, TEventArgs e);
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
public delegate void EventHandler<in TEventArgs>(object? sender, TEventArgs e) where TEventArgs : allows ref struct;
public delegate void EventHandler<TEventArgs>(object? sender, TEventArgs e);
[System.Serializable]
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e) where TEventArgs : EventArgs;
[System.Serializable]
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
type EventHandler<'EventArgs> = delegate of obj * 'EventArgs -> unit
[<System.Serializable>]
type EventHandler<'EventArgs (requires 'EventArgs :> EventArgs)> = delegate of obj * 'EventArgs -> unit
[<System.Serializable>]
type EventHandler<'EventArgs> = delegate of obj * 'EventArgs -> unit
Public Delegate Sub EventHandler(Of TEventArgs)(sender As Object, e As TEventArgs)
Public Delegate Sub EventHandler(Of In TEventArgs)(sender As Object, e As TEventArgs)
Typparametrar
- TEventArgs
Typen av händelsedata som genereras av händelsen.
Parametrar
- sender
- Object
Källan till händelsen.
- e
- TEventArgs
Ett objekt som innehåller händelsedata.
- Attribut
Exempel
I följande exempel visas en händelse med namnet ThresholdReached. Händelsen är associerad med ett EventHandler<TEventArgs> ombud.
using System;
namespace ConsoleApplication3
{
public class Program3
{
public static void Main()
{
Counter c = new(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 readonly int _threshold;
private int _total;
public Counter(int passedThreshold)
{
_threshold = passedThreshold;
}
public void Add(int x)
{
_total += x;
if (_total >= _threshold)
{
ThresholdReachedEventArgs args = new()
{
Threshold = _threshold,
TimeReached = DateTime.Now
};
OnThresholdReached(args);
}
}
protected virtual void OnThresholdReached(ThresholdReachedEventArgs e)
{
ThresholdReached?.Invoke(this, e);
}
public event EventHandler<ThresholdReachedEventArgs>? ThresholdReached;
}
public class ThresholdReachedEventArgs : EventArgs
{
public int Threshold { get; set; }
public DateTime TimeReached { get; set; }
}
}
open System
type ThresholdReachedEventArgs(threshold, timeReached) =
inherit EventArgs()
member _.Threshold = threshold
member _.TimeReached = timeReached
type Counter(threshold) =
let mutable total = 0
let thresholdReached = Event<_>()
member this.Add(x) =
total <- total + x
if total >= threshold then
let args = ThresholdReachedEventArgs(threshold, DateTime.Now)
thresholdReached.Trigger(this, args)
[<CLIEvent>]
member _.ThresholdReached = thresholdReached.Publish
let c_ThresholdReached(sender, e: ThresholdReachedEventArgs) =
printfn $"The threshold of {e.Threshold} was reached at {e.TimeReached}."
exit 0
let c = Counter(Random().Next 10)
c.ThresholdReached.Add c_ThresholdReached
printfn "press 'a' key to increase total"
while Console.ReadKey(true).KeyChar = 'a' do
printfn "adding one"
c.Add 1
Module Module1
Sub Main()
Dim c As Counter = New Counter(New Random().Next(10))
AddHandler c.ThresholdReached, AddressOf c_ThresholdReached
Console.WriteLine("press 'a' key to increase total")
While Console.ReadKey(True).KeyChar = "a"
Console.WriteLine("adding one")
c.Add(1)
End While
End Sub
Sub c_ThresholdReached(sender As Object, e As ThresholdReachedEventArgs)
Console.WriteLine("The threshold of {0} was reached at {1}.", e.Threshold, e.TimeReached)
Environment.Exit(0)
End Sub
End Module
Class Counter
Private threshold As Integer
Private total As Integer
Public Sub New(passedThreshold As Integer)
threshold = passedThreshold
End Sub
Public Sub Add(x As Integer)
total = total + x
If (total >= threshold) Then
Dim args As ThresholdReachedEventArgs = New ThresholdReachedEventArgs()
args.Threshold = threshold
args.TimeReached = DateTime.Now
OnThresholdReached(args)
End If
End Sub
Protected Overridable Sub OnThresholdReached(e As ThresholdReachedEventArgs)
RaiseEvent ThresholdReached(Me, e)
End Sub
Public Event ThresholdReached As EventHandler(Of ThresholdReachedEventArgs)
End Class
Class ThresholdReachedEventArgs
Inherits EventArgs
Public Property Threshold As Integer
Public Property TimeReached As DateTime
End Class
Kommentarer
Händelsemodellen i .NET baseras på att ha en händelsedelegat som ansluter en händelse med dess hanterare. För att skapa en händelse krävs två element:
- Ett ombud som refererar till en metod som ger svaret på händelsen.
- Alternativt en klass som innehåller händelsedata, om händelsen innehåller data.
Ombudet är en typ som definierar en signatur, dvs. typ av returvärde och parameterlista för en metod. Du kan använda ombudstypen för att deklarera en variabel som kan referera till vilken metod som helst med samma signatur som ombudet.
Standardsignaturen för en händelsehanterardelegat definierar en metod som inte returnerar ett värde. Den här metodens första parameter är av typen Object och refererar till den instans som genererar händelsen. Den andra parametern härleds från typen EventArgs och innehåller händelsedata. Om händelsen inte genererar händelsedata är den andra parametern bara värdet för EventArgs.Empty fältet. Annars är den andra parametern en typ som härleds från EventArgs och tillhandahåller alla fält eller egenskaper som behövs för att lagra händelsedata.
Ombudet EventHandler<TEventArgs> är ett fördefinierat ombud som representerar en händelsehanterarmetod för en händelse som genererar data. Fördelen med att använda EventHandler<TEventArgs> är att du inte behöver koda ditt eget anpassade ombud om händelsen genererar händelsedata. Du anger helt enkelt typen av händelsedataobjekt som allmän parameter.
Om du vill associera händelsen med den metod som ska hantera händelsen lägger du till en instans av ombudet till händelsen. Händelsehanteraren anropas när händelsen inträffar, såvida du inte tar bort ombudet.
Mer information om ombud för händelsehanterare finns i Hantera och höja händelser.
Tilläggsmetoder
| Name | Description |
|---|---|
| GetMethodInfo(Delegate) |
Hämtar ett objekt som representerar den metod som representeras av det angivna ombudet. |