Procedura dettagliata: dichiarazione e generazione di eventi
Aggiornamento: novembre 2007
In questa procedura dettagliata vengono illustrate la dichiarazione e la generazione di eventi per una classe denominata Widget. Dopo aver completato i passaggi richiesti, è possibile leggere l'argomento correlato, Procedura dettagliata: gestione di eventi, in cui viene descritto come utilizzare eventi da oggetti Widget per fornire informazioni sullo stato in un'applicazione.
Classe Widget
Si supponga per il momento di disporre di una classe Widget. Poiché alla classe Widget è associato un metodo il cui tempo di esecuzione potrebbe essere elevato, si desidera che nell'applicazione venga visualizzato un indicatore di completamento.
Naturalmente è possibile fare in modo che l'oggetto Widget mostri una finestra di dialogo relativa alla percentuale di completamento, ma tale finestra verrebbe visualizzata in tutti i progetti in cui viene utilizzata la classe Widget. Nel corso della progettazione di oggetti è consigliabile lasciare che l'interfaccia utente venga gestita dall'applicazione che utilizza un oggetto, a meno che lo scopo dell'oggetto non sia la gestione di un form o di una finestra di dialogo.
Poiché lo scopo di Widget è l'esecuzione di altre attività, è consigliabile aggiungere un evento PercentDone e consentire alla routine che chiama i metodi Widget di gestire tale evento e di visualizzare gli aggiornamenti relativi allo stato. L'evento PercentDone è inoltre in grado di fornire un meccanismo per l'annullamento dell'attività.
Per creare un esempio di codice per questo argomento
Aprire un nuovo progetto Applicazione Windows di Visual Basic e creare un form denominato Form1.
Aggiungere due pulsanti e un'etichetta a Form1.
Assegnare un nome agli oggetti, come illustrato nella tabella riportata di seguito.
Oggetto
Proprietà
Impostazione
Button1
Text
Inizia attività
Button2
Text
Annulla
Label
(Name), Text
lblPercentDone, 0
Scegliere Aggiungi classe dal menu Progetto per aggiungere una classe denominata Widget.vb al progetto.
Per dichiarare un evento per la classe Widget
Utilizzare la parola chiave Event per dichiarare un evento nella classe Widget. Si noti che è possibile che a un evento siano associati gli argomenti ByVal e ByRef, come dimostrato dall'evento PercentDone di Widget:
Public Event PercentDone(ByVal Percent As Single, _ ByRef Cancel As Boolean)
Quando l'oggetto chiamante riceve un evento PercentDone, l'argomento Percent indica la percentuale completata dell'attività. Per annullare il metodo che ha generato l'evento, è possibile impostare su True l'argomento Cancel.
Nota: |
---|
È possibile dichiarare argomenti per gli eventi analogamente a quanto avviene per gli argomenti delle routine. Non è tuttavia possibile specificare per gli eventi argomenti Optional o ParamArray; gli eventi inoltre non hanno valori restituiti. |
L'evento PercentDone viene generato dal metodo LongTask della classe Widget. LongTask accetta due argomenti: il periodo di tempo apparentemente richiesto dal metodo per eseguire le operazioni e l'intervallo di tempo minimo necessario prima che LongTask sospenda le operazioni per generare l'evento PercentDone.
Per generare l'evento PercentDone
Per semplificare l'accesso alla proprietà Timer utilizzata da questa classe, aggiungere un'istruzione Imports alla sezione delle dichiarazioni del modulo di classe, sopra l'istruzione Class Widget.
Imports Microsoft.VisualBasic.DateAndTime
Aggiungere il codice seguente alla 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 l'applicazione chiama il metodo LongTask, la classe Widget genera l'evento PercentDone con un intervallo pari ai secondi definiti in MinimumInterval. Al ritorno dell'evento, LongTask controlla se l'argomento Cancel è stato impostato su True.
A questo punto sono necessarie alcune osservazioni. Per semplificare, la routine LongTask presuppone che si conosca anticipatamente il tempo richiesto dall'attività. In realtà questo dato non è quasi mai disponibile. È possibile che la suddivisione delle attività in blocchi di dimensioni uniformi risulti difficoltosa e spesso gli utenti desiderano soprattutto sapere quanto tempo è necessario attendere prima di ottenere un'indicazione relativa ad operazioni in corso.
Nell'esempio riportato è inoltre presente un ulteriore difetto. La proprietà Timer restituisce il numero di secondi dalla mezzanotte. Se avviata poco prima di mezzanotte, l'applicazione non funzionerà in modo corretto. Per una misurazione più precisa del tempo si consiglia di tenere in considerazione simili limitazioni o di utilizzare proprietà quali Now.
La classe Widget è ora in grado di generare eventi ed è quindi possibile passare all procedura dettagliata successiva. Nella sezione Procedura dettagliata: gestione di eventi viene illustrato come utilizzare WithEvents per associare un gestore eventi all'evento PercentDone.
Vedere anche
Attività
Procedura dettagliata: gestione di eventi
Procedura: scrivere gestori eventi
Concetti
Delegati e operatore AddressOf