Aracılığıyla paylaş


İzlenecek yol: Olayları Bildirme ve Oluşturma (Visual Basic)

Bir sınıf olan Widget için olayları nasıl bildireceğinizi ve oluşturacağınızı gösteren bu kılavuz. Adımları tamamladıktan sonra, bir uygulamada durum bilgisi sağlamak için nesnelerden olayların nasıl kullanılacağını gösteren Widget konusunu okumak isteyebilirsiniz.

Widget Sınıfı

Şu an için bir Widget sınıfınız olduğunu varsayalım. Sınıfınızın Widget yürütülmesi uzun sürebilecek bir yöntemi vardır ve uygulamanızın bir tür tamamlama göstergesi oluşturabilmesini istiyorsunuz.

Elbette, nesnenin tamamlanma yüzdesini gösteren bir diyalog kutusu göstermesini Widget sağlayabilirsiniz, ancak bu sınıfı kullandığınız her projede bu iletişim kutusuyla her zaman kalırsınız. Nesne tasarımının iyi bir ilkesi, nesne kullanan uygulamanın kullanıcı arabirimini işlemesine izin vermektir; nesnenin amacı formu veya iletişim kutusunu yönetmek değilse.

Amacı Widget diğer görevleri gerçekleştirmektir, bu nedenle bir PercentDone etkinlik eklemek ve Widget'n yöntemlerini çağıran yordamın bu olayı işlemesine ve durum güncelleştirmelerini görüntülemesine izin vermek daha iyidir. PercentDone olayı aynı zamanda görevi iptal etmek için bir mekanizma sağlayabilir.

Bu konuya yönelik kod örneğini oluşturmak için

  1. Yeni bir Visual Basic Windows Uygulaması projesi açın ve adlı Form1bir form oluşturun.

  2. İki düğme ve bir etiket Form1 öğesine ekleyin.

  3. Nesneleri aşağıdaki tabloda gösterildiği gibi adlandırın.

    Nesne Mülkiyet Ayarlar
    Button1 Text Görevi Başlat
    Button2 Text İptal
    Label (Name), Text lblTamamlanmaYüzdesi, 0
  4. Projeye adlı bir sınıf eklemek için Proje menüsünde Widget.vb seçin.

Widget sınıfı için bir olay bildirmek için

  • Event sınıfında bir olay bildirmek için anahtar sözcüğünü Widget kullanın. Bir olayın ByVal ve ByRef bağımsız değişkenleri olabileceğini, Widget'in PercentDone olayı gösterdiği gibi unutmayın.

    Public Event PercentDone(ByVal Percent As Single,
                             ByRef Cancel As Boolean)
    

Çağıran nesne bir PercentDone olay aldığında, Percent bağımsız değişken tamamlanan görevin yüzdesini içerir. Cancel bağımsız değişkeni, olayı tetikleyen yöntemi iptal etmek için True olarak ayarlanabilir.

Uyarı

Yordam bağımsız değişkenlerini bildirdiğiniz gibi olay bağımsız değişkenlerini de bildirebilirsiniz, şu istisnalar dışında: Olaylar Optional veya ParamArray bağımsız değişkenlerine sahip olamaz ve olayların dönüş değerleri yoktur.

PercentDone olayı, LongTask sınıfının Widget yöntemi tarafından tetiklenir. LongTask iki parametre kabul eder: yöntemin iş yapıyormuş gibi davranacağı süre uzunluğu ve LongTaskPercentDone olayını tetiklemek için duraklamadan önceki minimum zaman aralığı.

PercentDone olayını tetiklemek için

  1. Bu sınıf tarafından kullanılan Timer özelliğine erişimi basitleştirmek için, sınıf modülünüzün bildirimler bölümünün en üstüne, Imports deyiminin üstüne Class Widget ifadesini ekleyin.

    Imports Microsoft.VisualBasic.DateAndTime
    
  2. Widget sınıfına aşağıdaki kodu ekleyin:

    Public Sub LongTask(ByVal Duration As Single,
                        ByVal MinimumInterval As Single)
        Dim Threshold As Single
        Dim Start As Single
        Dim blnCancel As Boolean
    
        ' The Timer property of the DateAndTime object returns the seconds
        ' and milliseconds that have passed since midnight.
        Start = CSng(Timer)
        Threshold = MinimumInterval
    
        Do While CSng(Timer) < (Start + Duration)
            ' In a real application, some unit of work would
            ' be done here each time through the loop.
            If CSng(Timer) > (Start + Threshold) Then
                RaiseEvent PercentDone(
                Threshold / Duration, blnCancel)
                ' Check to see if the operation was canceled.
                If blnCancel Then Exit Sub
                Threshold = Threshold + MinimumInterval
            End If
        Loop
    End Sub
    

Uygulamanız LongTask yöntemini çağırdığında, Widget sınıfı PercentDone saniyede bir MinimumInterval olayını tetikler. Olay geri döndüğünde, LongTask parametresinin Cancel olarak True ayarlandığını kontrol eder.

Burada birkaç uyarı gereklidir. Kolaylık olması için, LongTask yordam görevin ne kadar süreceğini önceden bildiğinizi varsayar. Bu neredeyse hiç böyle bir durum değil. Görevlerin eşit boyuttaki öbeklere bölünmesi zor olabilir ve genellikle kullanıcılar için en önemli olan, bir şeyin gerçekleştiğini anlamadan önce geçen süredir.

Bu örnekte başka bir kusur görmüş olabilirsiniz. özelliği, Timer gece yarısından bu yana geçen saniye sayısını döndürür; bu nedenle, gece yarısından hemen önce başlatılırsa uygulama takılır. Zamanı ölçmeye yönelik daha dikkatli bir yaklaşım, bu tür sınır koşullarını dikkate alabilir veya Now gibi özellikler kullanarak bunlardan tamamen kaçınabilir.

Artık Widget sınıfı olayları tetikleyebilir hale geldikten sonra, sonraki kılavuza geçebilirsiniz. Kılavuz: Olayları İşleme, bir olay işleyicisini WithEvents olayıyla ilişkilendirmek için PercentDone nasıl kullanılacağını gösterir.

Ayrıca bakınız