Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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ê 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 do 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 caixa de diálogo.
A finalidade de Widget é executar outras tarefas, portanto, é melhor adicionar um evento PercentDone e permitir que o procedimento que chama os métodos de Widget trate 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 conforme mostrado na tabela a seguir.
Objeto Propriedade Configurações Button1TextIniciar Tarefa Button2TextCancelar Label(Name),TextlblPercentDone, 0 No menu Projeto , escolha Adicionar Classe para adicionar uma classe nomeada
Widget.vbao projeto.
Para declarar um evento para a classe Widget
Use a
Eventpalavra-chave para declarar um evento naWidgetclasse. Observe que um evento pode terByValeByRefargumentos, comoWidgetdemonstra o evento:PercentDonePublic Event PercentDone(ByVal Percent As Single, ByRef Cancel As Boolean)
Quando o objeto de chamada recebe um PercentDone evento, o Percent argumento contém o percentual da tarefa concluída. O Cancel argumento pode ser configurado para True cancelar o método que desencadeou o evento.
Observação
Você pode declarar argumentos de evento da mesma forma que faz argumentos de procedimentos, com as seguintes exceções: eventos não podem ter Optional ou ParamArray argumentos e os 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 gerar o PercentDone evento.
Para aumentar o evento PercentDone
Para simplificar o
Timeracesso à propriedade usada por essa classe, adicione uma instruçãoImportsà parte superior da seção declarações do módulo de classe, acima daClass Widgetinstrução.Imports Microsoft.VisualBasic.DateAndTimeAdicione 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 método LongTask, a classe Widget dispara o evento PercentDone a cada MinimumInterval segundos. Quando o evento é retornado, 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 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 visto outra falha neste exemplo. A Timer propriedade retorna o número de segundos que se 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 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.