Overzicht: Gebeurtenissen declareren en genereren (Visual Basic)
Artikel
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 is Widget om andere taken uit te voeren, dus het is beter om een PercentDone gebeurtenis toe te voegen en de procedure die de methoden aanroept Widgetom die gebeurtenis af te handelen 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.
Object
Eigenschappen
Instelling
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 de Widget klasse te declareren. Houd er rekening mee dat een gebeurtenis kan hebben en ByRef argumenten kan hebbenByVal, zoals Widgetde PercentDone gebeurtenis demonstreert:
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 om de methode die de gebeurtenis heeft gegenereerd, te True annuleren.
Notitie
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 doet alsof het werk doet, en het minimale tijdsinterval voordat LongTask de pauze wordt onderbroken om de PercentDone gebeurtenis te verhogen.
De PercentDone-gebeurtenis verhogen
Als u de toegang tot de Timer eigenschap die door deze klasse wordt gebruikt, wilt vereenvoudigen, voegt u boven de Class Widget instructie een Imports instructie toe boven de sectie Declaraties van uw klassemodule.
VB
Imports Microsoft.VisualBasic.DateAndTime
Voeg de volgende code toe aan de klasse Widget:
VB
PublicSub LongTask(ByVal Duration AsSingle,
ByVal MinimumInterval AsSingle)
Dim Threshold AsSingleDim Start AsSingleDim blnCancel AsBoolean' The Timer property of the DateAndTime object returns the seconds' and milliseconds that have passed since midnight.
Start = CSng(Timer)
Threshold = MinimumInterval
DoWhileCSng(Timer) < (Start + Duration)
' In a real application, some unit of work would' be done here each time through the loop.IfCSng(Timer) > (Start + Threshold) ThenRaiseEvent PercentDone(
Threshold / Duration, blnCancel)
' Check to see if the operation was canceled.If blnCancel ThenExitSub
Threshold = Threshold + MinimumInterval
EndIfLoopEndSub
Wanneer uw toepassing de LongTask methode aanroept, wordt de gebeurtenis elke MinimumInterval seconden gegenereerd door de WidgetPercentDone klasse. Wanneer de gebeurtenis wordt geretourneerd, LongTask controleert u of het Cancel argument is ingesteld op True.
Hier zijn enkele disclaimers nodig. Voor het gemak LongTask wordt ervan uitgegaan dat u van tevoren weet hoe lang de taak duurt. Dit is bijna nooit het geval. Het verdelen van taken in segmenten van zelfs grootte kan lastig zijn en vaak is wat het belangrijkst is voor gebruikers, simpelweg de hoeveelheid tijd die verloopt 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.
De bron voor deze inhoud vindt u op GitHub, waar u ook problemen en pull-aanvragen kunt maken en bekijken. Raadpleeg onze gids voor inzenders voor meer informatie.
Feedback over .NET
.NET is een opensourceproject. Selecteer een koppeling om feedback te geven:
Maak een gebruikersinterface met gegevensbinding. Uw gebruikersinterface wordt automatisch bijgewerkt op basis van de meest recente gegevens, terwijl de gegevens worden bijgewerkt als reactie op wijzigingen in de gebruikersinterface.