Partager via


Émulation de l'interruption dans une activité While

Cette rubrique s'applique à Windows Workflow Foundation 4.

Cet exemple montre comment interrompre le mécanisme d'exécution en boucle des activités suivantes : DoWhile, ForEach, While et ParallelForEach.

Cela est utile parce que Windows Workflow Foundation (WF) n'inclut aucune activité pour interrompre l'exécution de ces boucles.

Scénario

L'exemple recherche le premier fournisseur fiable dans une liste de fournisseurs (instances de la classe Vendor). Chaque fournisseur a un ID, un Name et une valeur de fiabilité numérique qui détermine à quel point le fournisseur est digne de confiance. L'exemple crée une activité personnalisée appelée FindReliableVendor qui reçoit deux paramètres d'entrée (une liste de fournisseurs et une valeur de fiabilité minimale) et retourne le premier fournisseur de la liste qui correspond aux critères fournis.

Interruption d'une boucle

Windows Workflow Foundation (WF) n'inclut aucune activité pour interrompre une boucle. L'exemple de code parvient à interrompre une boucle à l'aide d'une activité If et de plusieurs variables. Dans l'exemple, l'activité While est interrompue une fois qu'une valeur autre que Null a été affectée à la variable reliableVendor.

L'exemple de code suivant montre comment l'exemple interrompt une boucle while.

// Iterates while the “i” variable is lower than the size of the list 
// and any reliable Vendor is found.      
new While(env => i.Get(env) < this.Vendors.Get(env).Count && reliableVendor.Get(env) == null)
{
    DisplayName = "Main loop. Breaks when a reliable vendor is found",
    Body = new Sequence
    {                            
        Activities =
        {
            // This is the if used for setting the value of the break value…
            new If
            {
                DisplayName = "Check for a reliable vendor",

                //  If a vendor satisfies the reliability level…
                Condition = new InArgument<bool>(env => 
                           this.Vendors.Get(env)[i.Get(env)].Reliability > 
                           this.MinimumReliability.Get(env)),

                // then assign that vendor to the reliable vendor variable and 
                // the while condition becomes false (exit the loop).
                Then = new Assign<Vendor>
                {
                    To = reliableVendor,
                    Value = new InArgument<Vendor>(env => 
                                  this.Vendors.Get(env)[i.Get(env)])
                }
            },

            // Increment the iteration variable. 
            new Assign<int>
            {
                DisplayName = "Increment iteration variable",
                To = i,
                Value = new InArgument<int>(env => i.Get(env) + 1)
            } 
        }
    }
}

Pour utiliser cet exemple

  1. À l'aide de Visual Studio 2010, ouvrez le fichier solution EmulatingBreakInWhile.sln.

  2. Pour générer la solution, appuyez sur F6.

  3. Pour exécuter la solution, appuyez sur CTRL+F5.

Dd807393.Important(fr-fr,VS.100).gif Remarque :
Les exemples peuvent déjà être installés sur votre ordinateur. Recherchez le répertoire (par défaut) suivant avant de continuer.

<LecteurInstall>:\WF_WCF_Samples

Si ce répertoire n'existe pas, rendez-vous sur la page (éventuellement en anglais) des exemples Windows Communication Foundation (WCF) et Windows Workflow Foundation (WF) pour .NET Framework 4 pour télécharger tous les exemples Windows Communication Foundation (WCF) et WF. Cet exemple se trouve dans le répertoire suivant.

<LecteurInstall>:\WF_WCF_Samples\WF\Basic\Built-InActivities\EmulatingBreakInWhile