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

Bu izlenecek yol, adlı Widgetbir sınıf için olayları bildirmeyi ve oluşturmayı gösterir. Adımları tamamladıktan sonra, bir uygulamada durum bilgisi sağlamak için nesnelerden Widget olayların nasıl kullanılacağını gösteren İzlenecek Yol: Olayları İşleme konusunu okumak isteyebilirsiniz.

Pencere Öğesi 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üzdesi iletişim kutusu göstermesini Widget sağlayabilirsiniz, ancak ardından sınıfını kullandığınız Widget her projede bu iletişim kutusuyla takılı 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 olay eklemek ve 'nin yöntemlerini çağıran Widgetyordamın bu olayı işlemesine ve durum güncelleştirmelerini görüntülemesine izin vermek daha iyidir. Olay, PercentDone görevi iptal etmek için bir mekanizma da 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. öğesine iki düğme ve bir etiket Form1ekleyin.

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

    Object Özellik Ayar
    Button1 Text Görevi Başlat
    Button2 Text İptal
    Label (Name), Text lblPercentDone, 0
  4. Projeye adlı Widget.vb bir sınıf eklemek için Proje menüsünde Sınıf Ekle'yi 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. Olayda gösterildiği gibi WidgetPercentDone ve ByRef bağımsız değişkenleri olabileceğini ByVal 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.

Not

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

olay PercentDone sınıfı yöntemi Widget tarafından LongTask oluşturulur. LongTask iki bağımsız değişken alır: yöntemin iş yapıyormuş gibi davranacağı sürenin uzunluğu ve duraklatılmadan önce LongTask en düşük zaman aralığı olayı tetikler PercentDone .

PercentDone olayını yükseltmek için

  1. Bu sınıf tarafından kullanılan özelliğe erişimi basitleştirmek içinTimer, sınıf modülünüzün bildirimler bölümünün en üstüne deyimini deyiminin Class Widget üstüne ekleyinImports.

    Imports Microsoft.VisualBasic.DateAndTime
    
  2. Sınıfına Widget 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 yöntemini çağırdığındaLongTask, Widget sınıfı olayı her MinimumInterval saniye tetiklerPercentDone. Olay döndürdüğünde bağımsız LongTask değişkenin Cancel olarak ayarlandığını Truedenetler.

Burada birkaç yasal 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, bunun gibi sınır koşullarını dikkate alır veya gibi Nowözellikleri kullanarak bunlardan tamamen kaçının.

Widget Artık sınıfı olayları oluşturabildiğine göre, sonraki kılavuza geçebilirsiniz. İzlenecek yol: Olayları İşleme, bir olay işleyicisini olayla PercentDone ilişkilendirmek için nasıl kullanılacağını WithEvents gösterir.

Ayrıca bkz.