Feliratkozás és leiratkozás eseményekről (C# programozási útmutató)
Előfizethet egy olyan eseményre, amelyet egy másik osztály tett közzé, amikor egyéni kódot szeretne írni, amelyet az esemény létrehozásakor hívunk meg. Előfordulhat például, hogy feliratkozik egy gomb eseményére click
, hogy az alkalmazás valami hasznosat tegyen, amikor a felhasználó a gombra kattint.
Eseményekre való feliratkozás a Visual Studio IDE használatával
Ha nem látja a Tulajdonságok ablakot, Tervező nézetben kattintson a jobb gombbal arra az űrlapra vagy vezérlőelemre, amelyhez eseménykezelőt szeretne létrehozni, és válassza a Tulajdonságok lehetőséget.
A Tulajdonságok ablak tetején kattintson az Események ikonra.
Kattintson duplán a létrehozni kívánt eseményre, például az
Load
eseményre.A Visual C# létrehoz egy üres eseménykezelő metódust, és hozzáadja a kódhoz. Másik lehetőségként manuálisan is hozzáadhatja a kódot a Kód nézetben. Az alábbi kódsorok például deklarálnak egy eseménykezelő metódust, amely akkor lesz meghívva, amikor az
Form
osztály létrehozza az eseménytLoad
.private void Form1_Load(object sender, System.EventArgs e) { // Add your form load event handling code here. }
Az eseményre való feliratkozáshoz szükséges kódsor is automatikusan létrejön a
InitializeComponent
Form1.Tervező metódusban. cs fájl a projektben. A következőhöz hasonló:this.Load += new System.EventHandler(this.Form1_Load);
Eseményekre való feliratkozás programozott módon
Definiáljon egy eseménykezelő metódust, amelynek aláírása megegyezik az esemény delegált aláírásával. Ha például az esemény a EventHandler delegált típusán alapul, a következő kód a metódus csonkját jelöli:
void HandleCustomEvent(object sender, CustomEventArgs a) { // Do something useful here. }
Az összeadás-hozzárendelési operátor (
+=
) használatával csatoljon egy eseménykezelőt az eseményhez. Az alábbi példában tegyük fel, hogy egy elnevezettpublisher
objektumnak van egy eseménye.RaiseCustomEvent
Vegye figyelembe, hogy az előfizetői osztálynak szüksége van egy hivatkozásra a közzétevő osztályra az eseményekre való feliratkozáshoz.publisher.RaiseCustomEvent += HandleCustomEvent;
Lambda-kifejezéssel is megadhat egy eseménykezelőt:
public Form1() { InitializeComponent(); this.Click += (s,e) => { MessageBox.Show(((MouseEventArgs)e).Location.ToString()); }; }
Eseményekre való feliratkozás névtelen függvény használatával
Ha később nem kell leiratkoznia egy eseményről, a hozzáadás-hozzárendelési operátorral (+=
) csatolhat egy névtelen függvényt eseménykezelőként. A következő példában tegyük fel, hogy egy elnevezett publisher
objektumnak van egy eseménye, RaiseCustomEvent
és hogy egy CustomEventArgs
osztály is definiálva van valamilyen speciális eseményinformáció hordozására. Vegye figyelembe, hogy az előfizetői osztálynak szüksége van egy hivatkozásra publisher
az eseményekre való feliratkozáshoz.
publisher.RaiseCustomEvent += (object o, CustomEventArgs e) =>
{
string s = o.ToString() + " " + e.ToString();
Console.WriteLine(s);
};
Az eseményről nem lehet egyszerűen leiratkozni, ha névtelen függvényt használt a feliratkozáshoz. Ha le szeretne iratkozni ebben a forgatókönyvben, lépjen vissza arra a kódra, amelyre előfizet az eseményre, tárolja a névtelen függvényt egy delegált változóban, majd adja hozzá a meghatalmazottat az eseményhez. Javasoljuk, hogy ne használjon névtelen függvényeket az eseményekre való feliratkozáshoz, ha le kell iratkoznia az eseményről a kód egy későbbi pontján. A névtelen függvényekről további információt a Lambda-kifejezésekben talál.
Leiratkozás
Ha meg szeretné akadályozni az eseménykezelő meghívását az esemény indításakor, leiratkozhat az eseményről. Az erőforrásszivárgások elkerülése érdekében le kell iratkoznia az eseményekről, mielőtt eltávolít egy előfizetői objektumot. Amíg le nem iratkozik egy eseményről, az eseményt a közzétételi objektum alapjául képező csoportos küldési meghatalmazott hivatkozik arra a meghatalmazottra, amely az előfizető eseménykezelőjét foglalja magában. Amíg a közzétételi objektum tartalmazza ezt a hivatkozást, a szemétgyűjtés nem törli az előfizetői objektumot.
Eseményről való leiratkozás
A kivonás-hozzárendelés operátorával (
-=
) leiratkozhat egy eseményről:publisher.RaiseCustomEvent -= HandleCustomEvent;
Ha az összes előfizető leiratkozott egy eseményről, a közzétevő osztály eseménypéldánya a következőre
null
van állítva: .
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: