Compartilhar via


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

Essa explicação passo a passo demonstra como declarar e gerar eventos para uma classe denominada Widget. Depois de completar os passos, você pode querer ler o tópico,Instruções passo a passo: tratando eventos (Visual Basic), que mostra como utilizar eventos a partir de objetos Widget para fornecer informações de status em um aplicativo.

A classe Widget

Suponha, por enquanto, que você tenha uma classe Widget. Sua classe Widgettem um método que pode levar bastante tempo para executar, e você deseja que o aplicativo seja capaz de colocar em backup algum tipo de indicador de conclusão.

É claro que você pode fazer o objeto Widget exibir uma caixa de diálogo percentualmente completa, mas depois você estaria preso a essa caixa de diálogo em cada projeto no qual você usasse a classe Widget . Um bom princípio de construção de objeto é deixar que o aplicativo que usa um objeto manipule a interface com o usuário - a não ser que o único propósito do objeto seja gerenciar um formulário ou uma caixa de diálogo.

O objetivo de Widget é realizar outras tarefas, de forma que seja melhor adicionar um evento PercentDone e deixar que o procedimento que chama os métodos Widget manipule esse evento e exiba atualizações de status. O evento PercentDone 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 de Aplicativo Windows Visual Basic e crie um formulário com o nome Form1.

  2. Adicione dois botões e um título para Form1.

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

    Object

    Propriedade

    Configuração

    Button1

    Text

    Iniciar tarefa

    Button2

    Text

    Cancel

    Label

    (Name), Text

    lblPercentDone, 0

  4. No menu Project, escolha Add Class para adicionar uma classe denominada Widget.vb ao projeto.

Para declarar um evento para a classe Widget

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

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

Quando o objeto chamado recebe um evento PercentDone o argumento Percent contém a porcentagem da tarefa que já foi concluída. O argumento Cancel pode ser configurado para True para cancelar o método que gerou o evento.

Dica

Você pode declarar argumentos de evento da mesma forma que você faz argumentos de procedimentos, com as seguintes exceções: Eventos não podem ter argumentos Optional ou ParamArray, e eventos não têm valor de retorno.

O PercentDone evento é gerado pela LongTask método da Widget classe. LongTaskleva dois argumentos: o período de tempo o método finge estar fazendo o trabalho e o intervalo mínimo de tempo antes de LongTask faz uma pausa para elevar a PercentDone evento.

Para elevar o evento PercentDone

  1. Para simplificar o acesso à propriedade Timer usada por essa classe, inclua uma declaração Imports no topo da seção de declarações do seu módulo de classe, acima da declaração Class Widget.

    Imports Microsoft.VisualBasic.DateAndTime
    
  2. Adicione o seguinte código à 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 método LongTask, a classe Widget gera o evento PercentDone a cada MinimumInterval segundos. Quando um evento retorna, LongTask verifica se o argumento Cancel foi modificado para True.

Algumas isenções são necessárias aqui. Para facilitar, o procedimento LongTask considera que você sabe, de antemão, quanto tempo a tarefa vai levar para ser completada. Isso é quase nunca o caso. Dividir tarefas em partes do mesmo tamanho pode ser difícil, e frequentemente o que mais importa aos usuários é simplesmente a quantidade de tempo que passa antes de obter uma indicação de que algo está acontecendo.

Você pode ter observado outra falha neste exemplo. A propriedade Timer retorna o número de segundos que passaram desde a meia-noite, portanto, o aplicativo trava se foi iniciado logo antes da meia-noite. Uma abordagem mais cuidadosa para medição de tempo, faria com que condições de contorno fossem levadas em consideração, ou evitadas simultaneamente, utilizando propriedades tais como Now.

Agora que a Widget classe pode elevar eventos, você pode mover para a próxima junto. Instruções passo a passo: tratando eventos (Visual Basic)Demonstra como usar WithEvents para associar um manipulador de eventos com o PercentDone evento.

Consulte também

Tarefas

Instruções passo a passo: tratando eventos (Visual Basic)

Referência

Timer

Now

Outros recursos

Eventos (Visual Basic)