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.
Het .NET Framework bevat verschillende activiteiten voor stroombeheer die vergelijkbaar zijn met abstracte programmeerstructuren (zoals Flowchart) of standaardprogrammeringsinstructies (zoals If). In dit onderwerp wordt de architectuur van een van de voorbeeldprojecten , Non-Generic ForEach, besproken.
De aangepaste klasse maken
Omdat de Non-Generic ForEach-klasse verantwoordelijk is voor het plannen van onderliggende activiteiten, moet deze worden afgeleid van NativeActivity, aangezien activiteiten die zijn afgeleid van CodeActivity deze functionaliteit missen.
public sealed class ForEach : NativeActivity
{
}
Voor de aangepaste klasse moeten verschillende leden gegevens opslaan die door de activiteit worden gebruikt en om functionaliteit te bieden om de onderliggende activiteiten van de activiteit uit te voeren. Deze leden omvatten:
valueEnumerator: Het niet-openbare Variable<T> van het type IEnumerator dat wordt gebruikt om over de verzameling items te itereren. Dit lid is van het type Variable<T> omdat het intern wordt gebruikt in de activiteit, in plaats van een argument of openbare eigenschap, die zou worden gebruikt als dit object een oorsprong buiten de activiteit zou hebben.OnChildComplete: De openbare CompletionCallback eigenschap die wordt uitgevoerd wanneer elk kind de uitvoering voltooit. Dit lid wordt gedefinieerd als een CLR-eigenschap, omdat de waarde ervan niet wordt gewijzigd voor verschillende exemplaren van de activiteit.Values: De verzameling invoer die wordt gebruikt voor de iteraties van de onderliggende activiteit. Dit lid is van het type InArgument<T>, omdat de oorsprong van de gegevens buiten de activiteit valt, maar de inhoud van de verzameling wordt niet verwacht te veranderen tijdens de uitvoering van de activiteit. Als de activiteit de functionaliteit nodig had om de inhoud van deze verzameling te wijzigen terwijl de activiteit werd uitgevoerd (om bijvoorbeeld activiteiten toe te voegen of te verwijderen), zou dit lid zijn gedefinieerd als een ActivityAction, die vervolgens zou zijn geëvalueerd telkens wanneer deze werd geopend, zodat wijzigingen beschikbaar zouden zijn voor de activiteit.Body: Dit lid definieert de activiteit die moet worden uitgevoerd voor elk item in deValuesverzameling. Dit lid wordt gedefinieerd als een ActivityAction zodanig dat het wordt geëvalueerd telkens wanneer het wordt geopend.Execute: Deze methode maakt gebruik van deInternalExecute,OnForEachCompleteenGetStateAndExecuteniet-openbare leden om de uitvoering te plannen en de voltooiingshandler toe te wijzen van de onderliggende activiteit die is gedefinieerd in het Body-lid.CacheMetadata: Dit lid biedt de runtime de informatie die nodig is om de activiteit uit te voeren. De methode vanCacheMetadataeen activiteit informeert standaard de runtime van alle openbare leden van de activiteit, maar omdat deze activiteit privéleden gebruikt voor bepaalde functionaliteit, moet de runtime hiervan op de hoogte worden gesteld, zodat de runtime hiervan op de hoogte kan zijn. In dit geval is deCacheMetadatafunctie overschreven, zodat toegang tot het privélidvalueEnumeratorkan worden verleend. Dit lid maakt ook een argument voor de waarden voor de activiteit, zodat deze tijdens de uitvoering aan de activiteit kunnen worden doorgegeven.