Porady: subskrybowanie i anulowanie subskrypcji zdarzeń (Przewodnik programowania w języku C#)
Można subskrybować zdarzenie, które jest publikowana przez inną klasę, gdy użytkownik chce napisać kod niestandardowy, który jest wywoływane, gdy zdarzenie jest wywoływane.Na przykład, może subskrybować przycisku click zdarzenie, aby sprawić, aby aplikacja zrobić coś użytecznego, gdy użytkownik kliknie przycisk.
Aby subskrybować zdarzeń przy użyciu programu Visual Studio IDE
Jeśli nie widzisz Właściwości okna, w Projekt wyświetlić, kliknij prawym przyciskiem myszy formularz lub formant, dla którego chcesz utworzyć procedurę obsługi zdarzeń, a następnie wybierz Właściwości.
Na górze Właściwości okna, kliknij zdarzenia ikona.
Kliknij dwukrotnie zdarzenie, które chcesz utworzyć, na przykład Load zdarzenia.
Visual C#metody obsługi zdarzenia pusty tworzy i dodaje go do kodu.Alternatywnie można dodać ręcznie w kodzie kodu widok.Na przykład, następujące wiersze kodu zadeklarować metody obsługi zdarzenia, która zostanie wywołana po Form klasy podbicia Load zdarzenia.
private void Form1_Load(object sender, System.EventArgs e) { // Add your form load event handling code here. }
Linia kodu, który jest wymagany do subskrybowania zdarzenia jest również automatycznie wygenerowana w InitializeComponent metoda w pliku Form1.Designer.cs w projekcie.Przypomina to:
this.Load += new System.EventHandler(this.Form1_Load);
Aby subskrybować zdarzenia programowo
Zdefiniowanie metody obsługi zdarzenia, którego podpis nie pasuje do podpisu delegata zdarzenia.Na przykład, jeśli zdarzenie jest oparta na EventHandler typ delegata, poniższy kod reprezentuje skrótowej metody:
void HandleCustomEvent(object sender, CustomEventArgs a) { // Do something useful here. }
Użyj operatora dodawania przydziału (+=) aby dołączyć modułu obsługi zdarzenia do zdarzenia.W poniższym przykładzie założono, że obiekt o nazwie publisher ma zdarzenia o nazwie RaiseCustomEvent.Należy zauważyć, że klasa abonenta musi odwołanie do klasy programu publisher, aby subskrybować jego zdarzeń.
publisher.RaiseCustomEvent += HandleCustomEvent;
Zauważ, że poprzednie składni nowych w C# 2.0.Jest to równoważne dokładnie składni języka C# 1.0, w którym encapsulating pełnomocnik musi jawnie utworzone za pomocą new słowa kluczowego:
publisher.RaiseCustomEvent += new CustomEventHandler(HandleCustomEvent);
Moduł obsługi zdarzeń można również dodawać za pomocą wyrażenia lambda:
public Form1() { InitializeComponent(); // Use a lambda expression to define an event handler. this.Click += (s,e) => { MessageBox.Show( ((MouseEventArgs)e).Location.ToString());}; }
Aby uzyskać więcej informacji, zobacz Porady: użycie wyrażeń lambda poza LINQ (Przewodnik programowania w języku C#).
Aby subskrybować zdarzeń za pomocą metody anonimowej
Jeśli nie trzeba będzie później anulowania subskrypcji zdarzeń, można użyć operatora dodawania przydziału (+=) do dołączania metody anonimowej na zdarzenie.W poniższym przykładzie założono, że obiekt o nazwie publisher ma zdarzenia o nazwie RaiseCustomEvent i CustomEventArgs klasy zdefiniowano także przeprowadzenie jakiś rodzaj informacji wyspecjalizowanych zdarzeń.Należy zauważyć, że klasa abonent musi odniesienie do publisher do subskrybowania jego zdarzeń.
publisher.RaiseCustomEvent += delegate(object o, CustomEventArgs e) { string s = o.ToString() + " " + e.ToString(); Console.WriteLine(s); };
Warto zauważyć, że użytkownik nie może łatwo subskrypcję zdarzenia Jeśli używane z funkcją anonimową go zasubskrybować.Aby anulować subskrypcję, w tym scenariuszu, to jest go z powrotem do kodu, w którym subskrybować zdarzenie, należy przechowywać metody anonimowej zmiennej obiektu delegowanego, a następnie dodać pełnomocnika do zdarzenia.Ogólnie rzecz biorąc firma Microsoft zaleca, aby subskrybować zdarzenia, jeśli będzie subskrypcję zdarzeń w pewnym momencie później w kodzie nie należy używać funkcji anonimowe.Aby uzyskać więcej informacji o funkcjach anonimowych, zobacz Funkcje anonimowe (Przewodnik programowania w języku C#).
Anulowanie
Aby zapobiec obsługi zdarzenia jest wywoływana, gdy zdarzenie jest wywoływane, subskrypcję zdarzeń.Aby zapobiec przecieków zasobów, należy subskrypcję zdarzenia przed likwidowane obiekt subskrybenta.Dopóki nie anulujesz subskrypcję zdarzenia multiemisji podporządkowanej zdarzenia w obiekcie publikowania pełnomocnika odwołanie do obiektu delegowanego, która hermetyzuje abonenta obsługi zdarzeń.Tak długo, jak obiekt publikowania zawiera odniesienia, wyrzucania elementów bezużytecznych nie usunie obiekt subskrybenta.
Aby anulować subskrypcję zdarzenia
Użyj operatora odejmowania przydziału (-=) aby anulować subskrypcję zdarzenia:
publisher.RaiseCustomEvent -= HandleCustomEvent;
Gdy zdarzenie wszystkim subskrybentom została anulowana, wystąpienie zdarzenia w klasie program publisher jest ustawiona na null.