Sdílet prostřednictvím


Přihlášení k odběru a odhlášení odběru událostí (Průvodce programováním v C#)

Přihlásíte se k odběru události publikované jinou třídou, pokud chcete napsat vlastní kód, který je volán při vyvolání této události. Můžete se například přihlásit k odběru události tlačítka click , aby vaše aplikace udělala něco užitečného, když uživatel klikne na tlačítko.

Přihlášení k odběru událostí pomocí integrovaného vývojového prostředí sady Visual Studio

  1. Pokud v návrhovém zobrazení nevidíte okno Vlastnosti, klikně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 okna Vlastnosti klikněte na ikonu Události .

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

    Visual C# vytvoří prázdnou metodu obslužné rutiny události a přidá ji do kódu. Případně můžete kód přidat ručně v zobrazení kódu . Například následující řádky kódu deklarují metodu obslužné rutiny události, která bude volána, když Form třída vyvolá Load událost.

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

    Řádek kódu, který se vyžaduje k přihlášení k odběru události, se také automaticky vygeneruje v InitializeComponent metodě v souboru Form1.Designer.cs ve vašem projektu. Podobá se tomu:

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

Přihlášení k odběru událostí prostřednictvím kódu programu

  1. Definujte metodu obslužné rutiny události, jejíž podpis odpovídá podpisu delegáta události. Pokud je například událost založená na typu delegáta EventHandler , představuje následující kód zástupný kód metody:

    void HandleCustomEvent(object sender, CustomEventArgs a)  
    {  
       // Do something useful here.  
    }  
    
  2. Pomocí operátoru přiřazení sčítání (+=) připojte obslužnou rutinu události k 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 třída odběratele potřebuje odkaz na třídu vydavatele, aby se přihlásila k odběru svých událostí.

    publisher.RaiseCustomEvent += HandleCustomEvent;  
    

    Můžete také použít výraz lambda k určení obslužné rutiny události:

    public Form1()  
    {  
        InitializeComponent();  
        this.Click += (s,e) =>
            {
                MessageBox.Show(((MouseEventArgs)e).Location.ToString());
            };
    }  
    

Přihlášení k odběru událostí pomocí anonymní funkce

Pokud se od události nemusíte odhlásit později, můžete pomocí operátoru sčítání přiřazení (+=) připojit anonymní funkci jako obslužnou rutinu události. V následujícím příkladu předpokládejme, že objekt pojmenovaný publisher má událost s názvem RaiseCustomEvent a že CustomEventArgs třída byla také definována pro přenos určitého druhu specializovaných informací o události. Všimněte si, že třída odběratele potřebuje odkaz na publisher odběr svých událostí.

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

Pokud jste k odběru události použili anonymní funkci, nemůžete se snadno odhlásit. Pokud se chcete v tomto scénáři odhlásit, vraťte se do kódu, ve kterém se přihlásíte k odběru události, uložte anonymní funkci do proměnné delegáta a pak přidejte delegáta do události. Doporučujeme nepoužívat anonymní funkce k přihlášení k odběru událostí, pokud se budete muset odhlásit od události později v kódu. Další informace o anonymních funkcích najdete v tématu Výrazy lambda.

Odhlášení

Pokud chcete zabránit vyvolání obslužné rutiny události při vyvolání události, zrušte odběr události. Aby se zabránilo úniku prostředků, měli byste se odhlásit z událostí, než odstraníte objekt odběratele. Dokud se neodhlásíte od události, delegát vícesměrového vysílání, který je základem události v objektu publikování, má odkaz na delegáta, který zapouzdřuje obslužnou rutinu události odběratele. Pokud objekt publikování obsahuje tento odkaz, uvolňování paměti neodstraní objekt odběratele.

Odhlášení odběru události

  • K odhlášení odběru události použijte operátor přiřazení odčítání (-=):

    publisher.RaiseCustomEvent -= HandleCustomEvent;  
    

    Pokud všichni odběratelé odhlásili odběr události, instance události ve třídě vydavatele je nastavena na null.

Viz také