Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Pick etkinliği, olay tetikleyicileri kümesinin ve ardından gelen karşılık gelen işleyicilerin modelleme sürecini basitleştirir. EtkinlikPick, PickBranch etkinliklerden oluşan bir koleksiyon içerir; burada her bir PickBranch, bir Trigger etkinlik ile bir Action etkinlik arasında bir eşleştirme oluşturur. Yürütülme anında tüm dalların tetikleyicileri paralel olarak yürütülür. Bir tetikleyici tamamlandığında ilgili eylemi yürütülür ve diğer tüm tetikleyiciler iptal edilir. .NET Framework 4.6.1Pick etkinliğinin davranışı .NET Framework 3.5 ListenActivity etkinliğine benzer.
Seçme Etkinliği SDK'sını Kullanma örneğindeki aşağıdaki ekran görüntüsünde iki dallı bir Seçme etkinliği gösterilmektedir. Bir dalın, komut satırından girişi okuyan özel bir etkinlik olan Girişi okuma adlı bir tetikleyicisi vardır. İkinci dalın bir etkinlik tetikleyicisi Delay vardır. Okuma girişi etkinliği etkinlik tamamlanmadan önce Delay veri alırsa Gecikme Delay iptal edilir ve konsola bir selamlama yazılır. Aksi takdirde, Okuma girişi etkinliği ayrılan sürede veri almazsa iptal edilir ve konsola bir zaman aşımı iletisi yazılır. Bu, herhangi bir eyleme zaman aşımı eklemek için kullanılan yaygın bir desendir.
En iyi yöntemler
Pick kullanıldığında yürütülen dal, tetikleyicisi ilk tamamlanan daldır. Kavramsal olarak, tüm tetikleyiciler paralel olarak yürütülür ve bir tetikleyici başka bir tetikleyici tamamlanarak iptal edilmeden önce mantığının büyük çoğunluğunu yürütebilir. Bunu göz önünde bulundurarak, Pick etkinliğini kullanırken izlenmesi gereken genel bir yönerge tetikleyiciyi tek bir olayı temsil ediyor olarak ele almak ve mümkün olduğunca az mantık koymaktır. İdeali olarak, tetikleyicinin bir olayı almak için yeterli mantığı içermesi ve bu olayın tüm işlemenin dalın eylemine aktarılması gerekir. Bu yöntem, tetikleyicilerin yürütülmesi arasındaki çakışma miktarını en aza indirir. Örneğin, her bir tetikleyicinin bir Pick etkinliği ve ardından ek mantık içerdiği iki tetikleyiciye sahip bir Receive'ü göz önünde bulundurun. Ek mantık bir boşta kalma noktası getirirse, her iki etkinliğin de Receive başarıyla tamamlanma olasılığı vardır. Tetikleyicilerden biri tamamen tamamlanırken, diğeri kısmen tamamlanır. Bazı senaryolarda, bir iletiyi kabul etmek ve ardından işlemesini kısmen tamamlamak kabul edilemez. Bu nedenle, Receive ve SendReply gibi WF yerleşik mesajlaşma etkinlikleri kullanılırken, Receive genellikle tetikleyicide kullanılır ve SendReply ile diğer mantık mümkün olduğunca eyleme yerleştirilmelidir.
Tasarımcıda Pick etkinliğini kullanma
Tasarımcıda Pick'i kullanmak için araç kutusunda Pick ve PickBranch'i bulun. Pick öğesini tuvale sürükleyip bırakın. Varsayılan olarak, tasarımcıda yeni bir Pick Etkinliği iki dal içerir. Başka dallar eklemek için PickBranch etkinliğini sürükleyin ve mevcut dalların yanına bırakın. Pick Etkinliği'ne etkinlikler Tetikleyici alanına veya herhangi bir PickBranch öğesinin Eylem alanına bırakılabilir.
Kodda Pick Etkinliğini kullanma
Pick aktivitesi, Branches koleksiyonunu PickBranch aktiviteleriyle doldurarak kullanılır. Etkinliklerin PickBranch her birinin Trigger türünde bir Activity özelliği vardır. Belirtilen etkinliğin yürütülmesi tamamlandığında, Action yürütülür.
Aşağıdaki kod örneği, konsoldan bir satır okuma etkinliği için zaman aşımı uygulamak amacıyla bir Pick etkinliğinin nasıl kullanılacağını gösterir.
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>