İ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
yeni bir Visual Basic Windows uygulama projesi açın ve adlı bir form oluşturun
Form1.İçin iki düğme ve bir etiket ekleyin
Form1.Nesneleri aşağıdaki tabloda gösterildiği gibi adlandırın.
Nesne Özellik Ayar Button1TextBaşlangıç görevi Button2Textİptal Label(Name),TextlblPercentDone, 0 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ınWidget. OlayınByValByRef, olay gösterdiği gibi, ve bağımsız değişkenlerine sahip olabileceğini unutmayınWidgetPercentDone: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
TimerBu sınıf tarafından kullanılan özelliğe erişimi basitleştirmek için,Importssınıfının üst kısmındaki bildirim bölümünün üst kısmına bir ifade ekleyinClass Widget.Imports Microsoft.VisualBasic.DateAndTimeSı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 .