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

Bu izlenecek yol, adlı bir sınıf için olayların nasıl bildirileceğini ve oluşturulduğunu gösterir Widget . Adımları tamamladıktan sonra, bir uygulamada durum bilgilerini sağlamak için nesnelerden olayları nasıl kullanacağınızı gösteren Izlenecek yol: olayları işlemebaşlıklı yardımcı konuyu okumak isteyebilirsiniz Widget .

Pencere öğesi sınıfı

Bir sınıfa sahip olduğunuz andaki varsayılır Widget . WidgetSınıfınız, yürütülmesi uzun sürebilecek bir yönteme sahiptir ve uygulamanızın bir tür tamamlanma göstergesi koyabilmesini istiyorsunuz.

Kuşkusuz, Widget nesneyi yüzde-tam-Tamam iletişim kutusu olarak gösterebilirsiniz, ancak bu iletişim kutusuyla sınıfı kullandığınız her projede bu iletişim kutusuyla birlikte kalmış olursunuz Widget . Nesne tasarımının iyi bir prensibi, nesnenin tüm amacı bir form veya iletişim kutusunu yönetmediği için, bir nesneyi kullanan uygulamanın kullanıcı arabirimini işlemesini sağlamaktır.

Amacı Widget diğer görevleri gerçekleştirmelidir, bu nedenle bir PercentDone olay eklemek ve yöntemlerini çağıran yordamın Widget Bu olayı işleme ve durum güncelleştirmelerini görüntülemesini sağlamak daha iyidir. PercentDoneOlay, görevi iptal etmek için bir mekanizma da sağlayabilir.

Bu konunun kod örneğini oluşturmak için

  1. yeni bir Visual Basic Windows uygulama projesi açın ve adlı bir form oluşturun Form1 .

  2. İçin iki düğme ve bir etiket ekleyin Form1 .

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

    Nesne Özellik Ayar
    Button1 Text Başlangıç görevi
    Button2 Text İptal
    Label (Name), Text lblPercentDone, 0
  4. Project menüsünde, projeye adlı bir sınıf eklemek için sınıf ekle ' yi seçin Widget.vb .

Pencere öğesi sınıfı için bir olay bildirmek için

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

    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 tamamlanmış görevin yüzdesini içerir. CancelBağımsız değişkeni, True olayı oluşturan yöntemi iptal etmek için olarak ayarlanabilir.

Not

Aşağıdaki özel durumlarla birlikte, yordam bağımsız değişkenlerini yaptığınız gibi olay bağımsız değişkenlerini bildirebilirsiniz: olaylar Optional veya ParamArray bağımsız değişkenlere sahip olamaz ve olayların dönüş değerleri yoktur.

PercentDoneOlay, sınıfının yöntemi tarafından tetiklenir LongTask Widget . LongTask iki bağımsız değişken alır: yöntemin iş yapmakta olduğu sürenin uzunluğu ve LongTask olayı yükseltmek için duraklamadan önce en kısa zaman aralığı PercentDone .

PercentDone olayını yükseltmek için

  1. TimerBu sınıf tarafından kullanılan özelliğe erişimi basitleştirmek için, Imports sınıfının üst kısmındaki bildirim bölümünün üst kısmına bir ifade ekleyin Class Widget .

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

    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 olayı her MinimumInterval saniye yükseltir. Olay döndüğünde, LongTask Cancel bağımsız değişkenin olarak ayarlanmış olup olmadığını denetler True .

Burada birkaç bildirimler gereklidir. Kolaylık olması için, LongTask yordamda görevin ne kadar süreceğine ilişkin daha fazla bilgi sahibi olduğunuz varsayılır. Bu neredeyse hiçbir durum değildir. Görevleri bile eşit ölçekli parçalara bölmek zor olabilir ve genellikle kullanıcıların en önemli bir şeyi, bir şeyin meydana geldiğinin bir göstergesi olmadan önce geçen süreyi belirtir.

Bu örnekte başka bir kusuru açığa çıkabilir. TimerÖzelliği, gece yarısından beri geçen saniye sayısını döndürür; bu nedenle, uygulama gece yarısından önce başlatılmışsa, uygulama takılmış olur. Bu süreyi ölçmeye yönelik daha dikkatli bir yaklaşım, gibi özellikleri kullanarak, bunun dikkate alınması veya bunların tamamen olmaması gibi sınır koşullarını ele alır Now .

Artık Widget sınıfın olayları tetiklemediğini, sonraki izlenecek yolu izleyebilirsiniz. Izlenecek yol: olayları işleme WithEvents , olay işleyicisini olayla ilişkilendirmek için nasıl kullanılacağını gösterir PercentDone .

Ayrıca bkz.