Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Pick tevékenység leegyszerűsíti az eseményindítók egy készletének modellezését, amelyet a hozzájuk tartozó kezelők követnek. A Pick tevékenység egy PickBranch tevékenységek gyűjteményét tartalmazza, ahol mindegyik PickBranch egy Trigger tevékenység és egy Action tevékenység közötti párosítás. A végrehajtáskor a rendszer az összes ág eseményindítóit párhuzamosan hajtja végre. Amikor egy eseményindító befejeződik, a rendszer végrehajtja a megfelelő műveletet, és az összes többi eseményindítót megszakítja. A .NET Framework 4.6.1-tevékenységPick viselkedése hasonló a .NET-keretrendszer 3.5-ös ListenActivity tevékenységéhez.
Az alábbi képernyőkép a Pick Activity SDK mintából egy Pick tevékenységet mutat, amelynek két ága van. Az egyik ághoz tartozik egy Olvasási bemenet nevű eseményindító, egy egyéni tevékenység, amely beolvassa a bemenetet a parancssorból. A második ág tevékenységindítóval Delay rendelkezik. Ha az adatolvasás tevékenység adatokat fogad, mielőtt a Delay aktivitás befejeződik, a Delay késleltetés megszakad, és a rendszer egy üdvözlőszöveget fog írni a konzolra. Ellenkező esetben, ha az olvasási beviteli tevékenység nem fogad adatokat a megadott időpontban, akkor az megszakad, és a rendszer időtúllépési üzenetet ír a konzolra. Ez egy gyakori sablon, amellyel időtúllépést adhat hozzá minden művelethez.
Ajánlott eljárások
A Pick használatakor az a végrehajtó ág működik, amelynek kiváltó oka először teljesül. Elméletileg az összes eseményindító párhuzamosan fut, és előfordulhat, hogy az egyik eseményindító végrehajtotta a logikájának többségét, mielőtt egy másik eseményindító befejeződése megszakította volna. Ezt szem előtt tartva a Pick tevékenység használatakor követendő általános útmutató az, hogy az eseményindítót egyetlen eseményként kezeli, és a lehető legkevesebb logikát helyezi bele. Ideális esetben az eseményindítónak elegendő logikát kell tartalmaznia az esemény fogadásához, és az esemény feldolgozásának az ág műveletébe kell mennie. Ezzel a módszerrel minimálisra csökkenthető az átfedés az eseményindítók végrehajtása között. Vegyük például a Pick két eseményindítót, ahol minden eseményindító tartalmaz egy Receive tevékenységet, amelyet további logika követ. Ha a további logika üresjárati pontot vezet be, akkor lehetséges, hogy mindkét Receive tevékenység sikeresen befejeződik. Az egyik eseményindító teljesen befejeződik, míg a másik részben befejeződik. Bizonyos esetekben az üzenet elfogadása, majd a feldolgozás részleges befejezése elfogadhatatlan. Ezért, amikor WF beépített üzenetkezelési tevékenységeket használ, például Receive és SendReply, bár a Receive gyakran az eseményindítóban van használva, a SendReply és más logikát mindig, amikor csak lehetséges, a műveletben kell elhelyezni.
A Pick tevékenység használata a tervezőben
A Pick tervezőben való használatához keresse meg a Pick és a PickBranch elemet az eszközkészletben. Húzza a Pick billentyűt a vászonra. Alapértelmezés szerint a tervezőben egy új pick activity két ágat fog tartalmazni. További ágak hozzáadásához húzza a PickBranch tevékenységet a meglévő ágak mellé. A tevékenységek a Pick Tevékenység Trigger területére vagy bármely PickBranchAction területére helyezhetők.
Kódban történő Pick Activity használat
A Pick tevékenység úgy használható, hogy a Branches gyűjteményt megtöltik PickBranch tevékenységekkel. Az PickBranch tevékenységek mindegyikének van egy Trigger típusú Activity tulajdonsága. Amikor a megadott tevékenység befejezi a végrehajtást, a Action végrehajtódik.
Az alábbi példakód bemutatja, hogyan lehet egy Pick tevékenységet használni időtúllépés implementálásához olyan tevékenységben, amely egy sort olvas be a konzolról.
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>