Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
Yeni bir Visual Basic Windows Uygulaması projesi açın ve adlı
Form1bir form oluşturun.İki düğme ve bir etiket
Form1öğesine ekleyin.Nesneleri aşağıdaki tabloda gösterildiği gibi adlandırın.
Nesne Mülkiyet Ayarlar Button1TextGörevi Başlat Button2Textİptal Label(Name),TextlblTamamlanmaYüzdesi, 0 Projeye adlı bir sınıf eklemek için Proje menüsünde
Widget.vbseçin.
Widget sınıfı için bir olay bildirmek için
Eventsınıfında bir olay bildirmek için anahtar sözcüğünüWidgetkullanın. Bir olayınByValveByRefbağımsız değişkenleri olabileceğini,Widget'inPercentDoneolayı 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
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,Importsdeyiminin üstüneClass Widgetifadesini ekleyin.Imports Microsoft.VisualBasic.DateAndTimeWidgetsı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.