Aracılığıyla paylaş


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 MySequencebaş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 MySequenceMySequence 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 MySequenceCacheMetadata yöntemi içinde yöntemine AddImplementationVariable bir çağrı eklenerek ortamın MySequence bir parçası olarak kaydedilir. Activity Koleksiyona MySequenceActivities 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 ActivityDelegateszamanlamak 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.

MyWhiletek 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ı OnEvaluationCompletedbir CompletionCallback<TResult><bool> ile zamanlar. yürütmesi Condition tamamlandığında, sonucu bu CompletionCallback aracılığıyla adlı resultkesin olarak belirlenmiş bir parametrede kullanılabilir hale gelir. isetrue, MyWhile nesnesini ve InternalExecute olarak CompletionCallbackgeçirerek BodyActivity öğesini çağırırScheduleActivity. Yürütme Body tamamlandığında, Condition içinde yeniden InternalExecutezamanlanır ve döngü yeniden başlatılır. döndürdüğünde Conditionfalse, öğ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

  1. Visual Studio'da Composite.sln örnek çözümünü açın.

  2. Çözümü derleyin ve çalıştırın.