Поделиться через


Пошаговое руководство. Объявление и создание событий (Visual Basic)

В этом пошаговом руководстве демонстрируется объявление и вызов событий для класса с именем Widget. После выполнения действий вам может потребоваться чтение сопутствующего раздела Пошаговое руководство. Обработка событий (Visual Basic), который показывает, как использовать события из Widget для предоставления сведений о состоянии в приложении.

Класс Widget

Предположим, что имеется класс Widget. В классе Widget существует метод, который выполняется достаточно долго, и требуется, чтобы приложение каким-либо образом отражало ход выполнения.

Конечно, диалоговое окно с ходом выполнения в процентах может отображаться объектом Widget, но тогда это окно будет присутствовать в каждом использующем класс Widget проекте. Хороший подход при разработке объекта — это передать приложению, использующему данный объект, обработку пользовательского интерфейса, если только объект не создан специально для управления формой или диалоговым окном.

Класс Widget предназначен для других целей, поэтому предпочтительней будет добавить событие PercentDone и передать процедуре, вызывающей методы Widget, обработку этого события и отображение сведений об изменении состояния. Событие PercentDone может также включать процедуру отмены данной задачи.

Создание примера кода для этого раздела

  1. Откройте новый проект Windows-приложения Visual Basic и создайте форму с именем Form1.

  2. Добавьте на форму Form1 две кнопки и метку.

  3. Присвойте объектам имена, как показано ниже в таблице.

    Объект

    Свойство

    Параметр

    Button1

    Text

    Начать выполнение задачи

    Button2

    Text

    Отмена

    Label

    (Name), Text

    lblPercentDone, 0

  4. В меню Project выберите команду Добавить класс, чтобы добавить класс с именем Widget.vb к проекту.

Чтобы объявить событие для класса Widget

  • Используйте ключевое слово Event для объявления события в классе Widget. Обратите внимание, что событие может иметь аргументы ByVal и ByRef, как событие Widget PercentDone показывает:

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

Когда вызывающий объект получает событие PercentDone, аргумент Percent содержит процент выполнения задачи. Аргументу Cancel может быть присвоено значение True, чтобы отменить вызвавший событие метод.

Примечание

Аргументы событий можно объявлять таким же образом, как аргументы процедур, за несколькими исключениями: события не могут иметь аргументы Optional или ParamArray и события не возвращают значения.

Событие PercentDone создается методом LongTask класса Widget. Метод LongTask получает два аргумента: продолжительность времени симулирования методом выполнения работы и минимальное время, после которого метод LongTask будет приостановлен для создания события PercentDone.

Чтобы вызвать событие PercentDone:

  1. Чтобы упростить доступ к используемому этим классом свойству Timer, добавьте оператор Imports в верхней части раздела объявлений модуля класса над оператором Class Widget.

    Imports Microsoft.VisualBasic.DateAndTime
    
  2. Добавьте в класс 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
    

Когда приложение вызывает метод LongTask, класс Widget вызывает событие PercentDone каждые MinimumInterval секунд. При возвращении события LongTask, проверяется, задано ли аргументу Cancel значение True.

Необходимо сделать несколько заявлений. Для упрощения задачи в процедуре LongTask предполагается, что время выполнения задачи известно заранее. Так бывает очень редко. Разделение задания на равные части может вызвать трудности, и чаще всего для пользователя самое важное — время, которое пройдет до того, как появятся сведения о происходящем процессе.

В этом примере можно найти еще один недостаток. Свойство Timer возвращает количество секунд, которые прошли с полуночи. Таким образом, приложение зависает, если оно начинает выполняться непосредственно перед полуночью. Для более точного измерения времени следует либо принять во внимание эти ограничения, либо попытаться обойти их, воспользовавшись такими свойствами, как Now.

Теперь, когда класс Widget может создавать события, можно переходить к следующему пошаговому руководству. В разделе Пошаговое руководство. Обработка событий (Visual Basic) показано, как использовать элемент WithEvents для связывания обработчика события с событием PercentDone.

См. также

Задачи

Пошаговое руководство. Обработка событий (Visual Basic)

Ссылки

Timer

Now

Другие ресурсы

События (Visual Basic)