Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tutorial se muestra cómo declarar y generar eventos para una clase denominada Widget
. Después de completar los pasos, es posible que desee leer el tema complementario Tutorial: Controlar eventos, que muestra cómo usar eventos de Widget
objetos para proporcionar información de estado en una aplicación.
La clase widget
Imagine en este momento que tiene una clase Widget
. La Widget
clase tiene un método que puede tardar mucho tiempo en ejecutarse y quiere que la aplicación pueda poner algún tipo de indicador de finalización.
Por supuesto, podría hacer que el objeto Widget
mostrara un cuadro de diálogo de porcentaje completado, pero después tendría que aguantar ese cuadro de diálogo en cada proyecto en el que usara la clase Widget
. Un buen principio de diseño de objetos es permitir que la aplicación que usa un objeto controle la interfaz de usuario, a menos que todo el propósito del objeto sea administrar un formulario o cuadro de diálogo.
El propósito de Widget
es realizar otras tareas, por lo que es mejor agregar un PercentDone
evento y dejar que el procedimiento que llama a los métodos de las llamadas Widget
controle ese evento y muestre las actualizaciones de estado. El PercentDone
evento también puede proporcionar un mecanismo para cancelar la tarea.
Para compilar el ejemplo de código para este tema
Abra un nuevo proyecto de aplicación windows de Visual Basic y cree un formulario denominado
Form1
.Agregue dos botones y una etiqueta a
Form1
.Asigne un nombre a los objetos como se muestra en la tabla siguiente.
Objeto Propiedad Configuración Button1
Text
Iniciar tarea Button2
Text
Cancelar Label
(Name)
,Text
lblPercentDone, 0 En el menú Proyecto , elija Agregar clase para agregar una clase denominada
Widget.vb
al proyecto.
Para declarar un evento para la clase Widget
Use la
Event
palabra clave para declarar un evento en laWidget
clase . Tenga en cuenta que un evento puede tenerByVal
yByRef
argumentos, como demuestra el eventoWidget
dePercentDone
.Public Event PercentDone(ByVal Percent As Single, ByRef Cancel As Boolean)
Cuando el objeto que realiza la llamada recibe un PercentDone
evento, el Percent
argumento contiene el porcentaje de la tarea que se ha completado. El Cancel
argumento se puede establecer en True
para cancelar el método que generó el evento.
Nota:
Puede declarar argumentos de evento igual que argumentos de procedimientos, con las siguientes excepciones: Los eventos no pueden tener Optional
argumentos o ParamArray
y los eventos no tienen valores devueltos.
El PercentDone
evento se genera mediante el LongTask
método de la Widget
clase .
LongTask
toma dos argumentos: el período de tiempo que el método pretende trabajar y el intervalo de tiempo mínimo antes de que LongTask
pause para generar el evento PercentDone
.
Para generar el evento PercentDone
Para simplificar el acceso a la
Timer
propiedad usada por esta clase, agregue unaImports
instrucción a la parte superior de la sección de declaraciones del módulo de clase, encima de laClass Widget
instrucción .Imports Microsoft.VisualBasic.DateAndTime
Agregue el siguiente código a la clase
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
Cuando la aplicación llama al LongTask
método , la Widget
clase genera el PercentDone
evento cada MinimumInterval
segundos. Cuando el evento vuelve, LongTask
comprueba si el argumento Cancel
se estableció en True
.
Aquí se necesitan algunos avisos de declinación de responsabilidades. Por motivos de simplicidad, el LongTask
procedimiento supone que sabe con antelación cuánto tardará la tarea. Esto casi nunca es el caso. Dividir las tareas en fragmentos de tamaño par puede ser difícil y, a menudo, lo que más importa a los usuarios es simplemente la cantidad de tiempo que pasa antes de obtener una indicación de que algo está sucediendo.
Es posible que haya detectado otro error en este ejemplo. La Timer
propiedad devuelve el número de segundos que han pasado desde la medianoche; por lo tanto, la aplicación se bloquea si se inicia justo antes de medianoche. Un enfoque más cuidadoso para medir el tiempo tomaría en consideración las condiciones de límite, como esta, o evitarlas por completo, mediante propiedades como Now
.
Ahora que la Widget
clase puede generar eventos, puede pasar al siguiente tutorial.
Tutorial: Controlar eventos muestra cómo usar WithEvents
para asociar un controlador de eventos al PercentDone
evento.