Aracılığıyla paylaş


Nasıl yapılır: Olaylara Abone Olma ve Aboneliği Kaldırma (C# Programlama Kılavuzu)

Bu olay ortaya çıktığında, olarak adlandırılan özel kod yazmak istiyorsanız, başka bir sınıf tarafından yayımlanan bir olay abone olun.Örneğin, bir düğme için abone click olay uygulamanızın kullanıcı düğmeyi tıklattığında yararlı bir şeyler yapmak için.

Visual Studio IDE kullanarak olaylara abone olmak için

  1. Göremiyorsanız, özelliklerini penceresinde, Tasarım görüntülemek için form veya bir olay işleyici yaratın ve istediğiniz denetimi sağ özelliklerini.

  2. Üstünde özelliklerini penceresinde tıklatın olaylar simgesi.

  3. Örneğin, oluşturmak istediğiniz olayı çift Load olay.

    Visual C#boþ bir olay iþleyici yöntemi oluşturur ve koda ekler.Alternatif olarak, kod alanında el ile ekleyebilirsiniz kod görünümü.Örneğin, aşağıdaki kod satırlarını ne zaman adlı bir olay işleyici yöntemi bildirmek Form raises sınıfı Load olay.

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

    Olaya abone olmak için gerekli olan kod satırına otomatik olarak oluşturulur InitializeComponent projenizde Form1.Designer.cs dosyasýndaki yönteminde.Bu benzer:

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

Programlı olarak olaylara abone olmak için

  1. Olay için temsilci imza, imza ile eşleşen bir olay işleyicisi yöntemi tanımlar.Örneğin olayın esas alıyorsa, EventHandler temsilci türü, aşağıdaki kod method stub temsil eder:

      void HandleCustomEvent(object sender, CustomEventArgs a)
      {
         // Do something useful here.
      }
    
  2. Ayrıca atama işlecini kullanın (+=), olay işleyicisini olaya baðlamak.Aşağıdaki örnekte, bir nesnenin adlandırılmış varsayalım publisher adlı bir olay olan RaiseCustomEvent.Subscriber sınıfı, olaylara abone için yayımcı sınıfının bir başvurusunu gerektiğini unutmayın.

    publisher.RaiseCustomEvent += HandleCustomEvent;
    

    Önceki sözdizimi C# 2.0 yeni olduğunu unutmayın.İçinde encapsulating temsilci açıkça oluşturulmalıdır kullanılarak C# 1.0 sözdizimini tam olarak eşdeğer new anahtar sözcük:

    publisher.RaiseCustomEvent += new CustomEventHandler(HandleCustomEvent);
    

    Bir olay işleyicisi de lambda ifadesi kullanılarak eklenebilir:

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

    Daha fazla bilgi için bkz. Nasıl yapılır: LINQ Dışında Lambda İfadeleri Kullanma (C# Programlama Kılavuzu).

Adsýz bir yöntem kullanarak olaylara abone olmak için

  • Daha sonra bir olay aboneliği gerek kalmaz, ayrıca atama işleci kullanabilirsiniz (+=) Adsýz bir yöntem olaya baðlamak.Aşağıdaki örnekte, bir nesnenin adlandırılmış varsayalım publisher adlı bir olay vardır RaiseCustomEvent ve bir CustomEventArgs sınıfı de tanımlanmış özel olay bilgilerini çeşit taşıyacak.Subscriber sınıfı bir başvuru için gereken Not publisher , olaylara abone olmak için.

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

    Kolayca abone için adsız işlevi kullanıldığında, bir olaydan aboneliği Kaldır alamazsınız fark önemlidir.Bu senaryoda aboneliğinizi sonlandırmak için olaya abone burada tekrar koda, Adsýz bir yöntem bir temsilci değişkende depolayın ve sonra temsilci olaya ekleyin gitmek gereklidir.Genel olarak, kodunuzu daha sonraki aşamasında olaydan aboneliği olacaksa olaylara abone olmak için adsız işlevlerde kullanmayın öneririz.Anonim işlevler hakkında daha fazla bilgi için bkz: Anonim İşlevler (C# Programlama Kılavuzu).

Aboneliği Kaldırılıyor

Olay oluştuğunda çağrılan, olay işleyicisi önlemek için olaydan aboneliği.Kaynak sızıntılarını önlemek için önce abone nesnesinin atma Olay aboneliği.Bir olay aboneliği kadar yayımlama nesne olay underlies çok noktaya yayın temsilci abonenin olay işleyicisi kapsülleyen temsilci başvuru var.Bu başvuru yayımlama nesne tutan sürece, çöp toplama abone nesneniz silinmesine neden olmaz.

Bir olay aboneliğini kaldırma

  • Çıkarma atama işlecini kullanın (-=) bir olay aboneliği için:

      publisher.RaiseCustomEvent -= HandleCustomEvent;
    

    Tüm abonelerin bir olaydan aboneliği kaldırılan olduğunda, publisher sınıfında olay örneği ayarlamak null.

Ayrıca bkz.

Görevler

Nasıl yapılır: .NET Framework Yönergeleriyle Uyumlu Olayları Yayımlama (C# Programlama Kılavuzu)

Başvuru

Olaylar (C# Programlama Kılavuzu)

event (C# Başvurusu)

-= İşleci (C# Başvurusu)

+= İşleci (C# Başvurusu)