Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ukázka CustomCompositeNativeActivity ukazuje, jak napsat NativeActivity , který naplánuje další Activity objekty pro řízení toku provádění pracovního postupu. Tato ukázka používá dva běžné řídicí toky, sequence a While, k předvedení toho, jak to udělat.
Detaily vzorku
MySequence Počínaje tím, první věcí, které byste si měli všimnout, je, že je odvozen od NativeActivity.
NativeActivity
Activity je objekt, který zveřejňuje úplnou šířku modulu runtime pracovního postupu prostřednictvím NativeActivityContext předávaného metoděExecute.
MySequence zveřejňuje veřejnou kolekci Activity objektů, které se naplní autorem pracovního postupu. Před spuštěním pracovního postupu modul runtime pracovního postupu volá metodu CacheMetadata pro každou aktivitu v pracovním postupu. Během tohoto procesu modul runtime vytváří vztahy mezi rodiči a dětmi pro správu rozsahu dat a životnosti. Výchozí implementace metody CacheMetadata používá třídu instance TypeDescriptor pro aktivitu MySequence k přidání jakékoli veřejné vlastnosti typu Activity nebo IEnumerable<Activity> jako podřízeného prvku aktivity MySequence.
Kdykoli aktivita zpřístupňuje veřejnou kolekci podřízených aktivit, je pravděpodobné, že tyto podřízené aktivity sdílejí stav. Je osvědčeným postupem, aby nadřazená aktivita, v tomto případě MySequence, také poskytla kolekci proměnných, prostřednictvím kterých mohou podřízené aktivity tento úkol splnit. Podobně jako podřízené aktivity metoda CacheMetadata přidává veřejné vlastnosti typu Variable nebo IEnumerable<Variable> jako proměnné přidružené k aktivitě MySequence.
Kromě veřejných proměnných, které manipulují podřízené objekty MySequence, musí MySequence také sledovat, v jaké fázi vykonávání se nacházejí jeho podřízení. K tomuto účelu používá privátní proměnnou currentIndex. Tato proměnná je registrována jako součást MySequence prostředí přidáním volání metody AddImplementationVariable v rámci aktivity MySequence metody CacheMetadata. Objekty Activity přidané do MySequenceActivities kolekce nemají přístup k proměnným přidaným tímto způsobem.
Při spuštění běhovým prostředím běhové prostředí volá svou metodu Execute s předáním NativeActivityContext. Jedná NativeActivityContext se o proxy příkazu aktivity zpět do běhového prostředí pro dereferencování argumentů a proměnných a plánování dalších objektů Activity nebo ActivityDelegates.
MySequence používá metodu InternalExecute k zapouzdření logiky plánování prvního dítěte a všech následujících dětí v jedné metodě. Začíná tím, že se dereferencuje currentIndex. Pokud se rovná počtu v Activities kolekci, pak se posloupnost dokončí, aktivita se vrátí bez plánování jakékoli práce a modul runtime ho přesune do Closed stavu. Pokud je currentIndex menší než počet aktivit, další potomek je získán z kolekce Activities a MySequence zavolá ScheduleActivity, kde je předán potomek, který má být naplánován, a CompletionCallback ukazuje na metodu InternalExecute. Nakonec se currentIndex zvýší a řízení se předá zpět modulu runtime. Pokud má instance MySequence naplánovaný podřízený Activity objekt, modul runtime ho považuje za spuštěný.
Po dokončení podřízené aktivity se CompletionCallback spustí. Smyčka pokračuje shora. Podobně jako Execute, CompletionCallback přijímá NativeActivityContext, čímž poskytuje implementátorovi přístup k runtime.
MyWhile se liší od MySequence tím, že plánuje jeden Activity objekt opakovaně a tím, že používá Activity<TResult><bool> pojmenovaný Condition k určení, zda má dojít k tomuto plánování. Podobně jako MySequence, MyWhile používá metodu InternalExecute k centralizaci jeho plánovací logiky. Naplánuje ConditionActivity<bool> s CompletionCallback<TResult><bool> pojmenovaným OnEvaluationCompleted. Po dokončení provedení Condition je jeho výsledek zpřístupněn prostřednictvím tohoto CompletionCallback v pevně typizovaném parametru s názvem result. Pokud true, MyWhile zavolá ScheduleActivity a předá objekt BodyActivity a InternalExecute jako CompletionCallback. Po dokončení Body se Condition znovu naplánuje v InternalExecute, čímž se znovu spustí smyčka. Když se Condition vrátí false, instance MyWhile dává řízení zpět modulu runtime bez plánování Body a modul runtime ho přesune do Closed stavu.
Nastavte, sestavte a spusťte ukázku
Otevřete ukázkové řešení Composite.sln ve Visual Studio.
Sestavte a spusťte řešení.