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


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

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

Класс мини-приложения

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

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

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

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

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

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

  3. Присвойте им имена, как показано в следующей таблице.

    Object Свойство Параметр
    Button1 Text Запуск задачи
    Button2 Text Отменить
    Label (Name), Text lblPercentDone, 0
  4. В меню "Проект" выберите "Добавить класс", чтобы добавить класс с именем Widget.vb в проект.

Объявление события для класса Мини-приложения

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

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

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

Примечание.

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

Событие PercentDone вызывается методом LongTaskWidget класса. 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 класс вызывает событие каждые PercentDoneMinimumInterval секунды. Когда событие возвращается, проверка, чтобы узнатьCancel, LongTask задан Trueли аргумент.

Здесь необходимо несколько отказов. Для простоты процедура предполагает, LongTask что вы знаете заранее, сколько времени займет задача. Это почти никогда не так. Разделение задач на блоки даже размера может быть трудно, и часто важно, чтобы большинство пользователей было просто время, которое проходит, прежде чем они получают признаки того, что что-то происходит.

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

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

См. также