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

  1. otevřete nový projekt aplikace Visual Basic Windows a vytvořte formulář s názvem Form1 .

  2. Přidejte dvě tlačítka a popisky do Form1 .

  3. Pojmenujte objekty, jak je uvedeno v následující tabulce.

    Objekt Vlastnost Nastavení
    Button1 Text Spustit úkol
    Button2 Text Zrušit
    Label (Name), Text lblPercentDone, 0
  4. 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 Event klíčové slovo k deklaraci události ve Widget třídě. Všimněte si, že událost může ByVal mít ByRef argumenty a a Widget jako PercentDone udá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

  1. Chcete-li zjednodušit přístup k Timer vlastnosti, kterou používá tato třída, přidejte Imports příkaz na začátek oddílu deklarace v modulu třídy nad rámec Class Widget příkazu.

    Imports Microsoft.VisualBasic.DateAndTime
    
  2. Do 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.

Viz také