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.
CustomCompositeNativeActivity örneği, bir NativeActivity iş akışının yürütme akışını denetlemek için diğer Activity nesneleri zamanlayan bir yazma işlemini gösterir. Bu örnek, Sequence ve While adlı iki ortak kontrol akışını, bunun nasıl yapılacağını göstermek amacıyla kullanır.
Örnek Ayrıntılar
ile MySequencebaşlayarak, farkedilen ilk şey' den NativeActivitytüretilmiş olmasıdır.
NativeActivity, Activity nesnesi ile NativeActivityContext yöntemine aktarılarak iş akışı çalışma zamanının tamamını kullanıma sunar Execute.
MySequence iş akışı yazarı tarafından doldurulan Activity nesnelerinin herkese açık koleksiyonunu kullanıma sunar. İş akışı yürütülmeden önce, iş akışı çalışma zamanı bir iş akışındaki her etkinlikte CacheMetadata yöntemini çağırır. Bu işlem sırasında çalışma zamanı sistemi, veri kapsamını belirleme ve yaşam süresi yönetimi ve planlaması için ebeveyn-çocuk ilişkileri kurar.
CacheMetadata yönteminin varsayılan uygulaması, MySequence etkinliği için TypeDescriptor örnek sınıfını kullanarak, Activity veya IEnumerable<Activity türündeki herhangi bir ortak özelliği, MySequence etkinliğinin alt öğeleri olarak ekler.
Bir etkinlik, bir alt etkinlik koleksiyonunu açığa çıkardığında, büyük olasılıkla bu alt etkinlikler durum paylaşır. Bu örnekte MySequenceüst etkinliğin, alt etkinliklerin bunu gerçekleştirebileceği bir değişken koleksiyonunu da kullanıma sunması en iyi yöntemdir. Çocuk etkinlikleri gibi, CacheMetadata yöntemi, Variable veya IEnumerable<Variable> türündeki genel özellikleri MySequence etkinliğiyle ilişkili değişkenler olarak ekler.
MySequence'nin alt öğeleri tarafından manipüle edilen genel değişkenlerin yanı sıra, MySequence de alt öğelerinin yürütülme sırasında hangi aşamada olduğunu izlemelidir. Bunu gerçekleştirmek için özel bir değişken kullanır currentIndex. Bu değişken, MySequence etkinliğinin CacheMetadata yöntemi içinde AddImplementationVariable yöntemine bir çağrı eklenerek MySequence ortamının bir parçası olarak kaydedilir.
Activity Koleksiyona MySequenceActivities eklenen nesneler bu şekilde eklenen değişkenlere erişemez.
Çalışma zamanı MySequence'yi yürüttüğünde, çalışma zamanı Execute yöntemini çağırır ve bir NativeActivityContext iletir.
NativeActivityContext, bağımsız değişkenlerin ve değişkenlerin başvurularını kaldırmanın yanı sıra diğer Activity nesneleri veya ActivityDelegateszamanlamak için etkinliğin proxy'sinin çalışma zamanına geri dönmesidir.
MySequence, ilk alt öğeyi ve izleyen tüm alt öğeleri tek bir yöntemde zamanlama mantığını kapsüllemek için InternalExecute yöntemini kullanır. dolaylı erişim ile başlar currentIndex. Sayı Activities koleksiyonundaki sayıya eşitse, sıra tamamlanır ve etkinlik herhangi bir çalışmayı zamanlamadan geri döner, ardından çalışma zamanı bunu Closed durumuna taşır.
currentIndex aktivite sayısından az ise, bir sonraki alt öğe Activities koleksiyonundan alınır ve MySequence, zamanlanacak alt öğeyi ve InternalExecute yöntemini işaret eden bir CompletionCallback geçirerek ScheduleActivity çağrısını yapar. Son olarak, currentIndex değeri artırılır ve denetim çalışma zamanına geri döndürülr.
MySequence örneğinin, zamanlanmış bir alt Activity nesnesi olduğu sürece, çalışma zamanı bunu Yürütülüyor durumunda kabul eder.
Alt etkinlik tamamlandığında, CompletionCallback yürütülür. Döngü en üstten devam eder. Benzer şekilde, bir CompletionCallback bir NativeActivityContext alır ve uygulayıcıya çalışma zamanına erişim verir.
MyWhile, tek bir Activity nesneyi tekrarlı olarak zamanlaması ve bu zamanlamanın yapılması gerektiğini belirlemek için Activity<TResult><bool> adlı Condition değişkenini kullanmasıyla MySequence'den farklıdır. gibi MySequence, MyWhile zamanlama mantığını merkezileştirmek için bir InternalExecute yöntem kullanır.
Condition
Activity
<bool> değerini, CompletionCallback<TResult><bool> adındaki OnEvaluationCompleted ile zamanlar.
Condition yürütmesi tamamlandığında, sonucu, güçlü tür tanımlı result adlı bir parametrede, bu CompletionCallback aracılığıyla kullanılabilir hale gelir. Eğer true, MyWhileScheduleActivity'yi çağırarak BodyActivity nesnesini ve InternalExecute'yi CompletionCallback olarak geçirir. Yürütme Body tamamlandığında, Condition içinde yeniden InternalExecutezamanlanır ve döngü yeniden başlatılır. "Çalışma zamanı Condition öğesi false döndürdüğünde, MyWhile bir örneği denetimi planlamadan çalışma zamanına geri verir ve çalışma zamanı onu Closed durumuna geçirir."
Örneği ayarlamak, derlemek ve çalıştırmak için
Visual Studio'da Composite.sln örnek çözümünü açın.
Çözümü derleyin ve çalıştırın.