Instruções passo a passo: declarando e acionando eventos (Visual Basic)

Este passo a passo demonstra como declarar e gerar eventos para uma classe chamada Widget. Depois de concluir as etapas, convém ler o tópico complementar, Passo a passo: Manipulando eventos, que mostra como usar eventos de objetos para fornecer informações de Widget status em um aplicativo.

A classe Widget

Suponha que, por enquanto, você tenha uma Widget classe. Sua Widget classe tem um método que pode levar muito tempo para ser executado e você deseja que seu aplicativo seja capaz de colocar algum tipo de indicador de conclusão.

Claro, você poderia fazer com que o Widget objeto mostrasse uma caixa de diálogo com porcentagem completa, mas então você ficaria preso a essa caixa de diálogo em cada projeto em que usou a Widget classe. Um bom princípio de design de objeto é permitir que o aplicativo que usa um objeto manipule a interface do usuário, a menos que toda a finalidade do objeto seja gerenciar um formulário ou uma caixa de diálogo.

A finalidade Widget é executar outras tarefas, portanto, é melhor adicionar um PercentDone evento e permitir que o procedimento que chama Widgetos métodos 'manipule esse evento e exiba atualizações de status. O PercentDone evento também pode fornecer um mecanismo para cancelar a tarefa.

Para criar o exemplo de código para este tópico

  1. Abra um novo projeto do Aplicativo Windows do Visual Basic e crie um formulário chamado Form1.

  2. Adicione dois botões e um rótulo a Form1.

  3. Nomeie os objetos como mostrado na tabela a seguir.

    Objeto Propriedade Configuração
    Button1 Text Tarefa de início
    Button2 Text Cancelar
    Label (Name), Text lblPercentDone, 0
  4. No menu Projeto, escolha Adicionar Classe para adicionar uma classe nomeada Widget.vb ao projeto.

Para declarar um evento para a classe Widget

  • Use a Event palavra-chave para declarar um evento na Widget classe. Observe que um evento pode ter ByVal e ByRef argumentos, como Widgetdemonstra o evento:PercentDone

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

Quando o objeto de chamada recebe um PercentDone evento, o Percent argumento contém a porcentagem da tarefa concluída. O Cancel argumento pode ser definido para True cancelar o método que gerou o evento.

Observação

Você pode declarar argumentos de evento assim como faz com argumentos de procedimentos, com as seguintes exceções: eventos não podem ter Optional ou ParamArray argumentos e eventos não têm valores retornados.

O PercentDone evento é gerado pelo LongTask método da Widget classe. LongTask usa dois argumentos: o período de tempo que o método fingiu estar fazendo trabalho e o intervalo de tempo mínimo antes LongTask de pausar para acionar o PercentDone evento.

Para aumentar o evento PercentDone

  1. Para simplificar o Timer acesso à propriedade usada por essa classe, adicione uma instrução Imports à parte superior da seção declarações do módulo de classe, acima da Class Widget instrução.

    Imports Microsoft.VisualBasic.DateAndTime
    
  2. Adicione o código a seguir à classe 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
    

Quando seu aplicativo chama o LongTask método, a Widget classe gera o evento a PercentDone cada MinimumInterval segundo. Quando o evento retorna, LongTask verifica se o Cancel argumento foi definido como True.

Alguns avisos de isenção de responsabilidade são necessários aqui. Para simplificar, o LongTask procedimento pressupõe que você saiba com antecedência quanto tempo a tarefa levará. Isso quase nunca é o caso. Dividir tarefas em partes de tamanho par pode ser difícil, e muitas vezes o que mais importa para os usuários é simplesmente a quantidade de tempo que passa antes que eles obtenham uma indicação de que algo está acontecendo.

Você pode ter visto outra falha neste exemplo. A Timer propriedade retorna o número de segundos passados desde a meia-noite; portanto, o aplicativo fica preso se for iniciado pouco antes da meia-noite. Uma abordagem mais cuidadosa para medir o tempo levaria em consideração condições de limite, como essa, ou as evitaria completamente, usando propriedades como Now.

Agora que a Widget classe pode gerar eventos, você pode passar para o próximo passo a passo. Passo a passo: a manipulação de eventos demonstra como usar WithEvents para associar um manipulador de eventos ao PercentDone evento.

Confira também