İzlenecek yol: Olay Bildirme ve Oluşturma (Visual Basic)
Bu izlenecek yol, adlı Widget
bir 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 Widget
yordamı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
Yeni bir Visual Basic Windows Uygulaması projesi açın ve adlı
Form1
bir form oluşturun.öğesine iki düğme ve bir etiket
Form1
ekleyin.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 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 gibiWidget
PercentDone
veByRef
bağımsız değişkenleri olabileceğiniByVal
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
Bu sınıf tarafından kullanılan özelliğe erişimi basitleştirmek için
Timer
, sınıf modülünüzün bildirimler bölümünün en üstüne deyimini deyimininClass Widget
üstüne ekleyinImports
.Imports Microsoft.VisualBasic.DateAndTime
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ı True
denetler.
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.