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 Widget
os 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
Abra um novo projeto do Aplicativo Windows do Visual Basic e crie um formulário chamado
Form1
.Adicione dois botões e um rótulo a
Form1
.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 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
demonstra 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
Para simplificar o
Timer
acesso à propriedade usada por essa classe, adicione uma instruçãoImports
à parte superior da seção declarações do módulo de classe, acima daClass Widget
instrução.Imports Microsoft.VisualBasic.DateAndTime
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.