Sdílet prostřednictvím


Jak: přihlásit a odhlásit odběr z události (Příručka programování C#)

Přihlášení k odběru události publikované jinou třídou, když chcete psát vlastní kód, který je volána v případě, že událost je aktivována.Například může přihlásit na tlačítko click událostí, aby aplikace užitečné něco udělat, když uživatel klepne na tlačítko.

K odběru události pomocí Visual Studio IDE

  1. Pokud nevidíte Vlastnosti okna, v návrhu zobrazení, klepněte pravým tlačítkem myši na formulář nebo ovládací prvek, pro který chcete vytvořit obslužnou rutinu události a vyberte Vlastnosti.

  2. V horní části Vlastnosti okna, klepněte události ikonu.

  3. Poklepejte na událost, kterou chcete vytvořit, například Load událostí.

    Visual C#metodu obslužné rutiny událostí prázdný vytvoří a přidá jej do kódu.Můžete také přidat ručně v kódu kód zobrazení.Například následující řádky kódu deklarovat metodu obslužnou rutinu události, která bude volána, když Form třídy vznese Load událostí.

    private void Form1_Load(object sender, System.EventArgs e)
    {
        // Add your form load event handling code here.
    }
    

    Řádek kódu, který je nutný k odběru události také automaticky generován InitializeComponent metody v souboru Form1.Designer.cs v projektu.Podobná této:

      this.Load += new System.EventHandler(this.Form1_Load);
    

Přihlásit se k odběru události programově

  1. Definujte metodu obslužné rutiny událostí, jejichž podpis neodpovídá podpisu delegáta události.Například událost je založena EventHandler typ delegáta, následující kód představuje metodu inzerováním:

      void HandleCustomEvent(object sender, CustomEventArgs a)
      {
         // Do something useful here.
      }
    
  2. Použijte operátor sčítání přiřazení (+=) připojit obslužné rutiny události.V následujícím příkladu předpokládejme, že objekt s názvem publisher má událost s názvem RaiseCustomEvent.Všimněte si, že předplatitel třídy potřebuje odkaz na třídu aplikace publisher k odběru jeho události.

    publisher.RaiseCustomEvent += HandleCustomEvent;
    

    Všimněte si, že předchozí syntaxe v C# 2.0.Je přesně ekvivalentní ve kterém encapsulating delegát musí být výslovně vytvořené pomocí syntaxe C# 1.0 new klíčové slovo:

    publisher.RaiseCustomEvent += new CustomEventHandler(HandleCustomEvent);
    

    Obslužnou rutinu události lze také přidat pomocí lambda výraz:

    public Form1()
    {
        InitializeComponent();
        // Use a lambda expression to define an event handler.
        this.Click += (s,e) => { MessageBox.Show(
           ((MouseEventArgs)e).Location.ToString());};
    }
    

    Další informace naleznete v tématu Jak: Lambda výrazy mimo LINQ (Příručka programování C#).

K odběru události pomocí anonymní metody.

  • Pokud jste k odběru události později, můžete použít operátor sčítání přiřazení (+=) k události připojit anonymní metody.V následujícím příkladu předpokládejme, že objekt s názvem publisher má událost s názvem RaiseCustomEvent a CustomEventArgs třídy také definován provést určitý druh specializované informace.Všimněte si, že třída subscriber potřebuje odkaz na publisher k odběru jeho události.

      publisher.RaiseCustomEvent += delegate(object o, CustomEventArgs e)
      {
        string s = o.ToString() + " " + e.ToString();
        Console.WriteLine(s);
      };
    

    Je důležité Všimněte si, že jste si snadno událost při anonymní funkce přihlásit k jeho odběru.Chcete-li odhlásit v této situaci, je nutné přejít zpět na kód, kde odběru události, ukládat anonymní metody v proměnné delegáta a pak přidat delegáta události.Obecně doporučujeme používat anonymní funkce přihlásit se k odběru události Pokud máte pro odhlášení od události někdy později v kódu.Další informace o anonymní funkce, viz Anonymní funkce (Příručka programování C#).

Odhlášení

Zabránit vyvolávané, když je aktivována událost obslužnou rutinu události, odběr událostí.Aby se předešlo nedostatku prostředků by odhlášení od událostí před vyřazení objektu účastníka.Až se odhlásíte odběr události, vícesměrového vysílání delegát podkladovou událostí v publikování objektu odkazuje na delegát, který zapouzdří účastníka obslužnou rutinu události.Jako publikování objekt obsahuje tento odkaz, uvolněné odběratelský objekt neodstraní.

Odhlásit se z události

  • Pomocí operátoru odčítání (-=) pro odhlášení od události:

      publisher.RaiseCustomEvent -= HandleCustomEvent;
    

    Když všichni účastníci mají unsubscribed z události, události instance třídy aplikace publisher je nastavena na null.

Viz také

Úkoly

Jak: publikování události, které odpovídají.NET Framework pokyny (Příručka programování C#)

Referenční dokumentace

Události (Příručka programování C#)

události (C#-Reference)

-= Operátor (C#-Reference)

+= Operátor (C#-Reference)