Baca dalam bahasa Inggris

Bagikan melalui


EventHandler Delegasikan

Definisi

Mewakili metode yang akan menangani peristiwa yang tidak memiliki data peristiwa.

C#
public delegate void EventHandler(object sender, EventArgs e);
C#
public delegate void EventHandler(object? sender, EventArgs e);
C#
[System.Serializable]
public delegate void EventHandler(object sender, EventArgs e);
C#
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public delegate void EventHandler(object sender, EventArgs e);

Parameter

sender
Object

Sumber dari peristiwa tersebut.

e
EventArgs

Objek yang tidak berisi data peristiwa.

Atribut

Contoh

Contoh berikut menunjukkan peristiwa bernama ThresholdReached yang terkait dengan EventHandler delegasi. Metode yang EventHandler ditetapkan ke delegasi dipanggil dalam OnThresholdReached metode .

C#
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; }
    }
}

Keterangan

Model peristiwa di .NET Framework didasarkan pada memiliki delegasi peristiwa yang menghubungkan peristiwa dengan handler-nya. Untuk menaikkan peristiwa, diperlukan dua elemen:

  • Delegasi yang mengidentifikasi metode yang memberikan respons terhadap peristiwa tersebut.

  • Secara opsional, kelas yang menyimpan data peristiwa, jika peristiwa menyediakan data.

Delegasi adalah jenis yang menentukan tanda tangan, yaitu jenis nilai yang dikembalikan dan jenis daftar parameter untuk metode. Anda dapat menggunakan jenis delegasi untuk mendeklarasikan variabel yang dapat merujuk ke metode apa pun dengan tanda tangan yang sama dengan delegasi.

Tanda tangan standar delegasi penanganan aktivitas menentukan metode yang tidak mengembalikan nilai. Parameter pertama metode ini berjenis Object dan mengacu pada instans yang meningkatkan peristiwa. Parameter kedua berasal dari jenis EventArgs dan menyimpan data peristiwa. Jika peristiwa tidak menghasilkan data peristiwa, parameter kedua hanyalah nilai EventArgs.Empty bidang . Jika tidak, parameter kedua adalah jenis yang berasal dari EventArgs dan memasok bidang atau properti apa pun yang diperlukan untuk menyimpan data peristiwa.

Delegasi EventHandler adalah delegasi yang telah ditentukan sebelumnya yang secara khusus mewakili metode penanganan aktivitas untuk peristiwa yang tidak menghasilkan data. Jika peristiwa Anda menghasilkan data, Anda harus menggunakan kelas delegasi generik EventHandler<TEventArgs> .

Untuk mengaitkan peristiwa dengan metode yang akan menangani peristiwa, tambahkan instans delegasi ke peristiwa. Penanganan aktivitas dipanggil setiap kali peristiwa terjadi, kecuali Anda menghapus delegasi.

Untuk informasi selengkapnya tentang delegasi penanganan aktivitas, lihat Menangani dan Menaikkan Peristiwa.

Metode Ekstensi

GetMethodInfo(Delegate)

Mendapatkan objek yang mewakili metode yang diwakili oleh delegasi yang ditentukan.

Berlaku untuk

Produk Versi
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Lihat juga