Udostępnij za pomocą


Przewodnik: Deklarowanie i Wywoływanie Zdarzeń (Visual Basic)

W tym przewodniku pokazano, jak zadeklarować i zgłosić zdarzenia dla klasy o nazwie Widget. Po wykonaniu tych kroków możesz przeczytać temat towarzyszący , Przewodnik: obsługa zdarzeń, który pokazuje, jak używać zdarzeń z Widget obiektów w celu udostępnienia informacji o stanie w aplikacji.

Klasa widżetu

Załóżmy na chwilę, że masz klasę Widget . Klasa Widget ma metodę, która może zająć dużo czasu, i chcesz, aby aplikacja mogła umieścić jakiś wskaźnik ukończenia.

Oczywiście można sprawić, że Widget obiekt pokaże okno dialogowe procentu, ale następnie utkniesz z tym oknem dialogowym w każdym projekcie, w którym użyto Widget klasy. Dobrą zasadą projektowania obiektu jest pozwolić aplikacji, która używa obiektu do obsługi interfejsu użytkownika — chyba że cały cel obiektu jest zarządzanie formularzem lub oknom dialogowym.

Celem Widget jest wykonywanie różnych zadań, więc lepiej jest dodać zdarzenie PercentDone i umożliwić procedurze, która wywołuje metody Widget, obsługiwanie tego zdarzenia i wyświetlanie aktualizacji statusu. Zdarzenie PercentDone może również zapewnić mechanizm anulowania zadania.

Aby skompilować przykład kodu dla tego tematu

  1. Otwórz nowy projekt aplikacji systemu Windows w języku Visual Basic i utwórz formularz o nazwie Form1.

  2. Dodaj dwa przyciski i etykietę do Form1.

  3. Nadaj obiektom nazwę, jak pokazano w poniższej tabeli.

    Przedmiot Majątek Ustawienia
    Button1 Text Rozpocznij zadanie
    Button2 Text Anuluj
    Label (Name), Text lblProcentWykonania, 0
  4. W menu Projekt wybierz pozycję Dodaj klasę , aby dodać klasę o nazwie Widget.vb do projektu.

Aby zadeklarować zdarzenie dla klasy Widget

  • Użyj słowa kluczowego Event , aby zadeklarować zdarzenie w Widget klasie. Należy pamiętać, że zdarzenie może mieć argumenty ByVal oraz ByRef, jak pokazuje zdarzenie WidgetPercentDone.

    Public Event PercentDone(ByVal Percent As Single,
                             ByRef Cancel As Boolean)
    

Gdy obiekt wywołujący odbiera PercentDone zdarzenie, Percent argument zawiera wartość procentową ukończenia zadania. Argument Cancel można ustawić na wartość True , aby anulować metodę, która wywołała zdarzenie.

Uwaga / Notatka

Argumenty zdarzeń można zadeklarować tak samo jak argumenty procedur, z następującymi wyjątkami: Zdarzenia nie mogą mieć Optional argumentów lub ParamArray nie mają zwracanych wartości.

Zdarzenie PercentDone jest wywoływane przez metodę LongTaskWidget klasy . LongTask przyjmuje dwa argumenty: czas, przez który metoda udaje, że wykonuje pracę, oraz minimalny interwał czasu przed wstrzymaniem LongTask w PercentDone celu podniesienia zdarzenia.

Aby wywołać zdarzenie PercentDone

  1. Aby uprościć dostęp do właściwości używanej Timer przez tę klasę, dodaj instrukcję Imports na początku sekcji deklaracji modułu klasy powyżej instrukcji Class Widget .

    Imports Microsoft.VisualBasic.DateAndTime
    
  2. Dodaj następujący kod do Widget klasy:

    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
    

Gdy aplikacja wywołuje metodę LongTask, klasa Widget zgłasza zdarzenie PercentDone co MinimumInterval sekundy. Po powrocie zdarzenia LongTask sprawdza, czy argument Cancel został ustawiony na wartość True.

W tym miejscu konieczne jest kilka zastrzeżeń. Dla uproszczenia procedura zakłada, LongTask że wiesz z wyprzedzeniem, jak długo będzie trwać zadanie. To prawie nigdy nie jest tak. Dzielenie zadań na fragmenty o równomiernym rozmiarze może być trudne, a często to, co ma największe znaczenie dla użytkowników, to po prostu ilość czasu, który przechodzi, zanim otrzymają wskazanie, że coś się dzieje.

Być może w tym przykładzie wykryto kolejną wadę. Właściwość Timer zwraca liczbę sekund, które przeszły od północy, w związku z czym aplikacja utknie, jeśli jest uruchomiona tuż przed północą. Bardziej ostrożne podejście do pomiaru czasu brałoby pod uwagę warunki graniczne, takie jak to, lub całkowicie ich unikać, korzystając z właściwości, takich jak Now.

Teraz, gdy Widget klasa może zgłaszać zdarzenia, możesz przejść do następnej instrukcji krok po kroku. Przewodnik: Obsługa zdarzeń pokazuje, jak używać WithEvents aby powiązać procedurę obsługi zdarzenia ze zdarzeniem PercentDone.

Zobacz także