Návod: Deklarace a vyvolávání událostí (Visual Basic)
Tento návod ukazuje, jak deklarovat a vyvolat události pro třídu s názvem Widget . Po dokončení kroků si můžete přečíst doprovodné téma, Návod: zpracování událostí, které ukazuje, jak používat události z Widget objektů k poskytnutí informací o stavu v aplikaci.
Widget – třída
Předpokládejme, kdy máte Widget třídu. Vaše Widget Třída má metodu, která může trvat dlouhou dobu, a chcete, aby aplikace mohla sestavit nějaký typ indikátoru dokončení.
Samozřejmě je možné nastavit, aby se v Widget objektu zobrazilo dialogové okno procento dokončení, ale pak byste zablokovali toto dialogové okno v každém projektu, ve kterém jste použili Widget třídu. Dobrým principem návrhu objektu je umožnit aplikaci, která používá objekt, zpracovat uživatelské rozhraní – Pokud celý účel objektu není spravovat formulář nebo dialogové okno.
Účelem Widget je provést jiné úkoly, takže je lepší přidat PercentDone událost a nechat proceduru, která volá Widget metody, zpracovávat tuto událost a zobrazovat aktualizace stavu. PercentDoneUdálost může také poskytovat mechanismus pro zrušení úlohy.
Postup sestavení příkladu kódu pro toto téma
otevřete nový projekt aplikace Visual Basic Windows a vytvořte formulář s názvem
Form1.Přidejte dvě tlačítka a popisky do
Form1.Pojmenujte objekty, jak je uvedeno v následující tabulce.
Objekt Vlastnost Nastavení Button1TextSpustit úkol Button2TextZrušit Label(Name),TextlblPercentDone, 0 v nabídce Project klikněte na možnost přidat třídu a přidejte do projektu třídu s názvem
Widget.vb.
Deklarace události pro třídu widgetu
Použijte
Eventklíčové slovo k deklaraci události veWidgettřídě. Všimněte si, že událost můžeByValmítByRefargumenty a aWidgetjakoPercentDoneudálost ukazuje:Public Event PercentDone(ByVal Percent As Single, ByRef Cancel As Boolean)
Když volající objekt obdrží PercentDone událost, Percent argument obsahuje procento dokončeného úkolu. CancelArgument lze nastavit na hodnotu True , chcete-li zrušit metodu, která událost vyvolala.
Poznámka
Argumenty události lze deklarovat stejně jako argumenty procedur, s následujícími výjimkami: události nemohou mít Optional ParamArray argumenty nebo a události nemají návratové hodnoty.
PercentDoneUdálost je vyvolána LongTask metodou Widget třídy. LongTask přebírá dva argumenty: dobu, po kterou metoda zamýšlí pracovat, a minimální časový interval před LongTask pauzou pro vyvolání PercentDone události.
Vyvolání události PercentDone
Chcete-li zjednodušit přístup k
Timervlastnosti, kterou používá tato třída, přidejteImportspříkaz na začátek oddílu deklarace v modulu třídy nad rámecClass Widgetpříkazu.Imports Microsoft.VisualBasic.DateAndTimeDo třídy přidejte následující kód
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
Když vaše aplikace volá LongTask metodu, Widget Třída vyvolá PercentDone událost každou MinimumInterval sekundou. Jakmile se událost vrátí, LongTask zkontroluje, zda Cancel byl argument nastaven na hodnotu True .
Tady je potřeba pár omezení. V zájmu jednoduchosti LongTask postup předpokládá, že jste předem věděli, jak dlouho bude úkol trvat. To téměř nikdy neplatí. Rozdělování úkolů do bloků rovnoměrné velikosti může být obtížné a často se jedná o většinu uživatelů, což je jednoduše doba, která se předá před tím, než získá indikaci, že se něco děje.
V této ukázce jste pravděpodobně spottedi jinou chybu. TimerVlastnost vrátí počet sekund, které byly předány od půlnoci. proto je aplikace zablokovaná, pokud je spuštěna těsně před půlnocí. Lepším přístupem k měření času by došlo k tomu, že se jedná o podmínky pro hranici, jako je to vhodné, nebo se jim vyhnete úplně, a to pomocí vlastností jako Now .
Teď, Widget když třída může vyvolávat události, můžete přejít k dalšímu návodu. Návod: zpracování událostí ukazuje, jak použít WithEvents k přidružení obslužné rutiny události k PercentDone události.