Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit scenario ziet u hoe u gebeurtenissen kunt declareren en genereren voor een klasse met de naam Widget
. Nadat u de stappen hebt voltooid, kunt u het bijbehorende onderwerp lezen, Walkthrough: Gebeurtenissen verwerken, waarin wordt uitgelegd hoe u gebeurtenissen van Widget
objecten kunt gebruiken om statusinformatie in een toepassing op te geven.
De widgetklasse
Stel dat u een Widget
klas hebt. Uw Widget
klasse heeft een methode die lang kan duren om uit te voeren en u wilt dat uw toepassing een soort voltooiingsindicator kan instellen.
Natuurlijk kunt u ervoor zorgen dat het Widget
object een dialoogvenster percentage voltooid weergeeft, maar dan blijft u vastzitten aan dat dialoogvenster in elk project waarin u de Widget
klasse hebt gebruikt. Een goed principe van objectontwerp is om de toepassing die gebruikmaakt van een object de gebruikersinterface te laten verwerken, tenzij het hele doel van het object is om een formulier of dialoogvenster te beheren.
Het doel van Widget
is om andere taken uit te voeren, dus het is beter om een PercentDone
gebeurtenis toe te voegen en de procedure die de methoden van Widget
aanroept, die gebeurtenis te laten afhandelen en statusupdates weer te geven. De PercentDone
gebeurtenis kan ook een mechanisme bieden voor het annuleren van de taak.
Het codevoorbeeld voor dit onderwerp maken
Open een nieuw Visual Basic Windows-toepassingsproject en maak een formulier met de naam
Form1
.Voeg twee knoppen en een label toe aan
Form1
.Geef de objecten een naam, zoals wordt weergegeven in de volgende tabel.
Voorwerp Vastgoed Configuratie Button1
Text
Taak starten Button2
Text
Annuleren Label
(Name)
,Text
lblPercentDone, 0 Kies Klasse toevoegen in het menu Project om een klasse met de naam
Widget.vb
aan het project toe te voegen.
Een gebeurtenis declareren voor de widgetklasse
Gebruik het
Event
trefwoord om een gebeurtenis in deWidget
klasse te declareren. Houd er rekening mee dat een gebeurtenis zowelByVal
alsByRef
argumenten kan hebben, zoals deWidget
PercentDone
gebeurtenis demonstreert:Public Event PercentDone(ByVal Percent As Single, ByRef Cancel As Boolean)
Wanneer het aanroepende object een PercentDone
gebeurtenis ontvangt, bevat het Percent
argument het percentage van de taak die is voltooid. Het Cancel
argument kan worden ingesteld op True
om de methode die de gebeurtenis heeft opgewekt te annuleren.
Opmerking
U kunt gebeurtenisargumenten op dezelfde wijze declareren als argumenten van procedures, met de volgende uitzonderingen: Gebeurtenissen kunnen geen argumenten hebben Optional
of ParamArray
argumenten en gebeurtenissen hebben geen retourwaarden.
De PercentDone
gebeurtenis wordt gegenereerd door de LongTask
methode van de Widget
klasse.
LongTask
heeft twee argumenten: de tijdsduur die de methode net doet alsof het werk verricht, en het minimale tijdsinterval voordat LongTask
pauzeert om de PercentDone
gebeurtenis te starten.
De PercentDone-gebeurtenis activeren
Als u de toegang tot de
Timer
eigenschap die door deze klasse wordt gebruikt, wilt vereenvoudigen, voegt u boven deImports
instructie eenClass Widget
instructie toe boven de sectie Declaraties van uw klassemodule.Imports Microsoft.VisualBasic.DateAndTime
Voeg de volgende code toe aan de klasse
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
Wanneer uw toepassing de LongTask
methode aanroept, wordt de gebeurtenis elke Widget
seconden gegenereerd door de PercentDone
MinimumInterval
klasse. Wanneer het evenement terugkeert, controleert LongTask
of het Cancel
-argument is ingesteld op True
.
Hier zijn enkele disclaimers nodig. Voor het gemak gaat de LongTask
procedure ervan uit dat u van tevoren weet hoe lang de taak duurt. Dit is bijna nooit het geval. Het verdelen van taken in segmenten van gelijke grootte kan lastig zijn en vaak is wat het belangrijkst voor gebruikers, simpelweg hoeveel tijd er verstrijkt voordat ze een indicatie krijgen dat er iets gebeurt.
Mogelijk hebt u een andere fout in dit voorbeeld gezien. De Timer
eigenschap retourneert het aantal seconden dat is verstreken sinds middernacht. De toepassing blijft dus hangen als deze net voor middernacht wordt gestart. Een meer zorgvuldige benadering van het meten van de tijd zou rekening houden met grensvoorwaarden zoals deze, of ze helemaal vermijden, met behulp van eigenschappen zoals Now
.
Nu de Widget
klas gebeurtenissen kan genereren, kunt u naar de volgende procedure gaan.
Walkthrough: Het verwerken van gebeurtenissen laat zien hoe WithEvents
u een gebeurtenis-handler koppelt aan de PercentDone
gebeurtenis.