Native Etkinliği Kullanan Özel Bileşik
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, bunun nasıl yapılacağını göstermek için sıralı ve while adlı iki ortak denetim akışı kullanır.
Örnek Ayrıntılar
ile MySequence
başlayarak, farkedilen ilk şey' den NativeActivitytüretilmiş olmasıdır. NativeActivity , yöntemine Activity geçirilen aracılığıyla NativeActivityContext iş akışı çalışma zamanının tamamını kullanıma sunan nesnedir Execute
.
MySequence
iş akışı yazarı tarafından doldurulan nesnelerin genel koleksiyonunu Activity kullanıma sunar. İş akışı yürütülmeden önce, iş akışı çalışma zamanı bir iş akışındaki CacheMetadata her etkinlikte yöntemini çağırır. Bu işlem sırasında çalışma zamanı, veri kapsamı ve yaşam süresi yönetimi için üst-alt ilişkiler kurar. yönteminin CacheMetadata varsayılan uygulaması, türündeki TypeDescriptorActivity herhangi bir ortak özelliği veyaActivity>IEnumerable<etkinliğin MySequence
alt öğeleri olarak eklemek üzere etkinliğin örnek sınıfını MySequence
kullanır.
Bir etkinlik, ortak bir alt etkinlik koleksiyonunu kullanıma sunsa, büyük olasılıkla bu alt etkinlikler durumu 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. Alt etkinlikler gibi, CacheMetadata yöntemi de etkinlikle MySequence
ilişkili tür Variable veyaVariableIEnumerable<> değişkenlerin genel özelliklerini ekler.
' nin alt öğeleri tarafından manipüle edilen genel değişkenlerin MySequence
MySequence
yanı sıra, alt öğelerinin yürütülmesinde nerede olduğunu da izlemelidir. Bunu gerçekleştirmek için özel bir değişken kullanır currentIndex
. Bu değişken, etkinliğin MySequence
CacheMetadata yöntemi içinde yöntemine AddImplementationVariable bir çağrı eklenerek ortamın MySequence
bir parçası olarak kaydedilir. Activity Koleksiyona MySequence
Activities
eklenen nesneler bu şekilde eklenen değişkenlere erişemez.
Çalışma zamanı tarafından yürütürken MySequence
, çalışma zamanı yöntemini çağırarak Execute bir NativeActivityContextiletir. 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 ActivityDelegates
zamanlamak için etkinliğin proxy'sinin çalışma zamanına geri dönmesidir. MySequence
, InternalExecute
ilk alt öğeyi ve izleyen tüm alt öğeleri tek bir yöntemde zamanlama mantığını kapsüllemek için bir yöntem kullanır. başvuruyu kaldırarak başlar currentIndex
. Koleksiyondaki Activities
sayıya eşitse, sıra tamamlanır, etkinlik herhangi bir çalışma zamanlanmadan geri döner ve çalışma zamanı bunu Closed duruma taşır. currentIndex
etkinlik sayısının altındaysa, bir sonraki alt öğe koleksiyondan Activities
alınır ve ScheduleActivityMySequence
zamanlanacak alt öğeyi ve yöntemi işaret eden InternalExecute
bir CompletionCallback öğesini geçirir. Son olarak, currentIndex
değeri artırılır ve denetim çalışma zamanına geri döndürülr. Örneğinin MySequence
zamanlanmış bir alt Activity nesnesi olduğu sürece çalışma zamanı bunu Yürütülüyor durumunda olarak kabul eder.
Alt etkinlik tamamlandığında, CompletionCallback yürütülür. Döngü en üstten devam eder. gibi Execute
, bir CompletionCallback alır NativeActivityContextve uygulayıcıya çalışma zamanına erişim verir.
MyWhile
tek bir Activity nesneyi art arda zamanlaması ve bu zamanlamanın gerçekleşip gerçekleşmeyeceğini belirlemek için adlı Condition
bir Activity<TResult><bool> kullanmasından MySequence
farklıdır. gibi MySequence
, MyWhile
zamanlama mantığını merkezileştirmek için bir InternalExecute
yöntem kullanır. Bool'unu Condition
><Activityadlı OnEvaluationCompleted
bir CompletionCallback<TResult><bool> ile zamanlar. yürütmesi Condition
tamamlandığında, sonucu bu CompletionCallback aracılığıyla adlı result
kesin olarak belirlenmiş bir parametrede kullanılabilir hale gelir. isetrue
, MyWhile
nesnesini ve InternalExecute
olarak CompletionCallbackgeçirerek Body
Activity öğesini çağırırScheduleActivity. Yürütme Body
tamamlandığında, Condition
içinde yeniden InternalExecute
zamanlanır ve döngü yeniden başlatılır. döndürdüğünde Condition
false
, öğesinin MyWhile
bir örneği denetimi zamanlamadan Body
çalışma zamanına geri verir ve çalışma zamanı bunu Closed duruma taşır.
Ö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.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin