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 Button1TextTaak starten Button2TextAnnuleren Label(Name),TextlblPercentDone, 0 Kies Klasse toevoegen in het menu Project om een klasse met de naam
Widget.vbaan het project toe te voegen.
Een gebeurtenis declareren voor de widgetklasse
Gebruik het
Eventtrefwoord om een gebeurtenis in deWidgetklasse te declareren. Houd er rekening mee dat een gebeurtenis zowelByValalsByRefargumenten kan hebben, zoals deWidgetPercentDonegebeurtenis 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
Timereigenschap die door deze klasse wordt gebruikt, wilt vereenvoudigen, voegt u boven deImportsinstructie eenClass Widgetinstructie toe boven de sectie Declaraties van uw klassemodule.Imports Microsoft.VisualBasic.DateAndTimeVoeg 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 PercentDoneMinimumInterval 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.