Demonstra Passo a passo: Declarando e disparando eventos 

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,Demonstra Passo a passo: Tratamento de eventos, 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.

    Objeto

    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.

Observação:

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

The PercentDone evento é gerado pela LongTask método para o Widget classe. LongTask leva dois argumentos: o período de tempo o método pretends a ser fazer trabalho, e o intervalo de tempo mínimo antes LongTask Pausa para elevar o 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.Demonstra Passo a passo: Tratamento de eventos Demonstra como usar WithEvents para associar um manipulador de eventos com o PercentDone evento.

Consulte também

Tarefas

Demonstra Passo a passo: Tratamento de eventos

Como: Escrever manipuladores evento

Conceitos

Eventos e manipuladores de eventos

Delegados e o operador AddressOf

AddHandler e RemoveHandler

Referência

Propriedade timer

WithEvents

Propriedade agora

Declaração de evento

ByVal

ByRef

Declaração Imports (Tipo e Namespace .NET)