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 Widget
os 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
Abra um novo projeto Visual Basic Windows Application e crie um formulário chamado
Form1
.Adicione dois botões e um rótulo ao
Form1
.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 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 naWidget
classe. Observe que um evento pode terByVal
eByRef
argumentos, comoWidget
o evento doPercentDone
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
Para simplificar o
Timer
acesso à propriedade usada por essa classe, adicione umaImports
instrução à parte superior da seção de declarações do módulo de classe, acima daClass Widget
instrução.Imports Microsoft.VisualBasic.DateAndTime
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.