Partilhar via


Passo a passo: Declarando e gerando 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, por enquanto, que você tem uma Widget aula. Sua Widget classe tem um método que pode levar muito tempo para ser executado, e você quer que seu aplicativo seja capaz de colocar algum tipo de indicador de conclusão.

Claro, você poderia fazer o Widget objeto mostrar uma caixa de diálogo de porcentagem completa, mas então você ficaria preso com essa caixa de diálogo em todos os projetos em que você 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.

O objetivo do é executar outras tarefas, por isso é melhor adicionar um PercentDone evento e deixar que o procedimento que chama Widgetos métodos de 's manipule esse evento e exiba atualizações de Widget 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 Visual Basic Windows Application e crie um formulário chamado Form1.

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

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

    Object Property Definição
    Button1 Text Iniciar tarefa
    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 Widgeto evento do PercentDone demonstra:

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

Quando o objeto chamador 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.

Nota

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

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

Para aumentar o evento PercentDone

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

    Imports Microsoft.VisualBasic.DateAndTime
    
  2. Adicione o seguinte código à Widget classe:

    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.

Algumas isenções de responsabilidade são necessárias aqui. Para simplificar, o LongTask procedimento pressupõe que você saiba com antecedência quanto tempo a tarefa levará. Quase nunca é assim. Dividir tarefas em partes de tamanho uniforme 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 detetado outra falha nesta amostra. A Timer propriedade retorna o número de segundos que passaram 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 contorno como esta, ou evitá-las completamente, usando propriedades como Now.

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

Consulte também