Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’activité Pick simplifie la modélisation d’un ensemble de déclencheurs d’événements suivis de leurs gestionnaires correspondants. Une Pick activité contient une collection d’activités PickBranch , où chacun PickBranch est un jumelage entre une Trigger activité et une Action activité. Au moment de l’exécution, les déclencheurs pour toutes les branches sont exécutés en parallèle. Lorsqu’un déclencheur est terminé, son action correspondante est exécutée et tous les autres déclencheurs sont annulés. Le comportement de l’activité .NET Framework 4.6.1Pick est similaire à l’activité .NET Framework 3.5 ListenActivity .
La capture d’écran suivante de l’exemple du SDK Utilisation de l’activité Pick montre une activité Pick avec deux branches. Une branche a un déclencheur appelé Lire l'entrée, une activité personnalisée qui lit l'entrée depuis la ligne de commande. La deuxième branche a un déclencheur d’activité Delay . Si l’activité d’entrée en lecture reçoit des données avant la fin de l’activité Delay , Delay le délai est annulé et un message d’accueil est écrit dans la console. Sinon, si l’activité d’entrée en lecture ne reçoit pas de données dans le temps imparti, elle est annulée et un message de délai d’attente est écrit dans la console. Il s’agit d’un modèle courant utilisé pour ajouter un délai d’expiration à n’importe quelle action.

Meilleures pratiques
Lors de l'utilisation de Pick, la branche exécutée est la branche dont le déclencheur a fini de s'exécuter en premier. Conceptuellement, tous les déclencheurs s’exécutent en parallèle et un déclencheur peut avoir exécuté la majorité de sa logique avant d’être annulé par l’achèvement d’un autre déclencheur. Dans cet esprit, une recommandation générale à suivre lors de l’utilisation de l’activité Pick consiste à traiter le déclencheur comme représentant un événement unique et à mettre aussi peu de logique que possible dans celui-ci. Dans l’idéal, le déclencheur doit contenir une logique suffisante pour recevoir un événement, et tout le traitement de cet événement doit entrer dans l’action de la branche. Cette méthode réduit le chevauchement entre l'exécution des déclencheurs. Par exemple, considérez un Pick avec deux déclencheurs, où chaque déclencheur contient une Receive activité suivie d'une logique supplémentaire. Si la logique supplémentaire introduit un point d’inactivité, il est possible que les deux Receive activités se terminent avec succès. Un déclencheur est entièrement terminé, tandis qu’un autre est partiellement terminé. Dans certains scénarios, l’acceptation d’un message, puis la fin partielle du traitement de celui-ci est inacceptable. Par conséquent, lors de l’utilisation d’activités de messagerie intégrées de WF telles que Receive et SendReply, comme Receive est couramment utilisé dans le déclencheur, il est conseillé de mettre SendReply et d’autres logiques dans l’action dans la mesure du possible.
Utilisation de l’activité Pick dans le concepteur
Pour utiliser Pick dans le concepteur, recherchez Pick et PickBranch dans la boîte à outils. Faites glisser Pick pour le déposer sur le canevas. Par défaut, une nouvelle activité Pick dans le concepteur contient deux branches. Pour ajouter des branches supplémentaires, faites glisser l’activité PickBranch et déposez-la en regard des branches existantes. Les activités peuvent être déposées sur l’activité Pick dans la zone Trigger ou dans la zone Action de n’importe quelle activité PickBranch.
Utilisation de l'activité Pick dans le code
L'activité Pick est utilisée en remplissant sa collection Branches avec des activités PickBranch. Les PickBranch activités ont chacune une Trigger propriété de type Activity. Lorsque l’activité spécifiée termine son exécution, Action est exécuté.
L’exemple de code suivant montre comment utiliser une Pick activité pour implémenter un délai d’attente pour une activité qui lit une ligne à partir de la console.
Sequence body = new Sequence()
{
Variables = { name },
Activities =
{
new System.Activities.Statements.Pick
{
Branches =
{
new PickBranch
{
Trigger = new ReadLine
{
Result = name,
BookmarkName = "name"
},
Action = new WriteLine
{
Text = ExpressionServices.Convert<string>(ctx => "Hello " +
name.Get(ctx))
}
},
new PickBranch
{
Trigger = new Delay
{
Duration = new TimeSpan(0, 0, 5)
},
Action = new WriteLine
{
Text = "Time is up."
}
}
}
}
}
};
<Sequence xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Sequence.Variables>
<Variable x:TypeArguments="x:String" Name="username" />
</Sequence.Variables>
<Pick>
<PickBranch>
<PickBranch.Trigger>
<ReadLine BookmarkName="name" Result="username" />
</PickBranch.Trigger>
<WriteLine>[String.Concat("Hello ", username)]</WriteLine>
</PickBranch>
<PickBranch>
<PickBranch.Trigger>
<Delay>00:00:05</Delay>
</PickBranch.Trigger>
<WriteLine>Time is up.</WriteLine>
</PickBranch>
</Pick>
</Sequence>