Sdílet prostřednictvím


Výběr aktivity

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. V době provádění se triggery pro všechny větve spouští 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 s ukázkou Sady SDK pro výběr aktivity 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 aktivační událost aktivity. Pokud vstupní aktivita čtení přijímá data před Delay dokončením aktivity, Delay zpoždění bude zrušeno a pozdrav se zapíše 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.

Pick Activity

Osvědčené postupy

Při použití příkazu Pick je větev, která se spustí, větev, jejíž aktivační událost se dokončí jako první. Koncepčně se všechny triggery spouští paralelně a jedna aktivační událost mohla před zrušením zrušit dokončením jiné aktivační události. 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 zasílání zpráv WF, například Receive a , zatímco Receive se běžně používá v triggeru, SendReply a další logika by měla být v akci, kdykoli SendReplyje to možné.

Použití aktivity Výběr v návrháři

Pokud chcete v návrháři použít výběr, najděte v sadě nástrojů výběr a výběrbranch . Přetáhněte výběr na plátno. Ve výchozím nastavení bude nová aktivita výběru 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 je možné převést na aktivitu pick do oblasti aktivační události nebo do oblasti akce libovolného 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í provádění zadané aktivity se Action provede.

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>