Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Aktivita Pick zjednodušuje modelování sady triggerů událostí následovaných odpovídajícími obslužnými rutinami. Pick Aktivita obsahuje kolekci PickBranch aktivit, kde každá PickBranch z nich je párování mezi aktivitou Trigger a aktivitouAction. Při spuštění se triggery pro všechny větve spouštějí paralelně. Po dokončení jedné aktivační události se provede odpovídající akce a všechny ostatní triggery se zruší. Chování aktivity rozhraní .NET Framework 4.6.1Pick je podobné aktivitě rozhraní .NET Framework 3.5 ListenActivity .
Následující snímek obrazovky z ukázky SDK Použití aktivity Výběr ukazuje aktivitu Výběr se dvěma větvemi. Jedna větev má trigger s názvem Čtení vstupu, vlastní aktivita, která čte vstup z příkazového řádku. Druhá větev má Delay spouštěč aktivity. Pokud aktivita 'Čtení vstupu' přijímá data dříve, než aktivita Delay skončí, zpoždění Delay bude zrušeno a pozdrav bude zapsán do konzoly. V opačném případě, pokud vstupní aktivita čtení nepřijímá data v přiděleném čase, bude zrušena a zpráva o vypršení časového limitu se zapíše do konzoly. Jedná se o běžný vzor, který se používá k přidání časového limitu k jakékoli akci.
Osvědčené postupy
Při použití funkce Pick se spustí ta větev, jejíž aktivační událost se dokončí jako první. Koncepčně se všechny triggery spouštějí paralelně, a jeden trigger může vykonat většinu své logiky před tím, než je zrušen v důsledku dokončení jiného triggeru. S ohledem na to je obecné vodítko, které je třeba dodržovat při použití aktivity Výběr, je považovat trigger za reprezentaci jedné události a dát do ní co nejmenší logiku. V ideálním případě by trigger měl obsahovat pouze dostatečnou logiku pro příjem události a veškeré zpracování této události by mělo jít do akce větve. Tato metoda minimalizuje množství překrývání mezi spuštěním aktivačních událostí. Představte si Pick například s dvěma triggery, kde každá aktivační událost obsahuje aktivitu následovanou Receive další logikou. Pokud dodatečná logika představuje nečinný bod, existuje možnost úspěšného dokončení obou Receive aktivit. Jedna aktivační událost se úplně dokončí, zatímco druhá se částečně dokončí. V některých scénářích přijetí zprávy a následné částečné dokončení zpracování je nepřijatelné. Proto při použití předdefinovaných aktivit pro zasílání zpráv ve WF, jako jsou Receive a SendReply, zatímco Receive se běžně používá v triggeru, by měly být SendReply a další logika umístěny do akce, kdykoli je to možné.
Použití aktivity Výběr v prostředí návrháře
Pokud chcete v návrháři použít Pick, najděte v sadě nástrojů Pick a PickBranch. Přetáhněte Pick na plátno. Ve výchozím nastavení bude nová aktivita Pick v návrháři obsahovat dvě větve. Pokud chcete přidat další větve, přetáhněte aktivitu PickBranch a přesuňte ji vedle existujících větví. Aktivity lze vložit do aktivity Pick buď do oblasti Trigger, nebo do oblasti Action libovolné PickBranch.
Použití aktivity "Pick" v kódu
Aktivita Pick se používá naplněním kolekce Branches aktivitami PickBranch . Aktivity PickBranch mají Trigger vlastnost typu Activity. Po dokončení určené aktivity se Action spustí.
Následující příklad kódu ukazuje, jak použít Pick aktivitu k implementaci časového limitu pro aktivitu, která čte řádek z konzoly.
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>