2009-11-26 7 views
0

J'essaye d'écrire une CompositeActivity personnalisée en utilisant WF3.5. Quelque chose comme un WhileActivity. Le problème est lorsque je veux exécuter l'activité enfant à nouveau (il a précédemment réussi avec un dernier appel à ActivityExecutionContext.CloseActivity()) Je reçois une InvalidOperationException, avec ce message: "L'état de l'activité doit être" Initialisé "pour l'exécution ". À partir du débogage du problème, il semble que ExecutionStatus de l'activité enfant est fermé et son ExecutionResult est non initialisé.Exécution d'une activité enfant une seconde fois

Mais le document MSDN pour ActivityExecutionContext.ExecuteActivity indique que "si le statut est fermé, l'activité est initialisée et exécutée". Alors, pourquoi ai-je cette exception et comment puis-je l'éviter?

Merci, Julien

Répondre

1

Je pense avoir trouvé la réponse. L'activité composite doit créer un nouveau ActivityExecutionContext pour l'activité enfant chaque fois qu'elle souhaite démarrer l'activité enfant.

exécution de l'activité de l'enfant dans une nouvelle ActivityExecutionContext:

ActivityExecutionContext context2 = executionContext.ExecutionContextManager.CreateExecutionContext(a); 

// listen for the child's activity completion by implementing IActivityEventListener<ActivityExecutionStatusChangedEventArgs> 
context2.Activity.RegisterForStatusChange(Activity.ClosedEvent, this); 
context2.ExecuteActivity(context2.Activity); 

Nettoyage après l'activité est fermée:

// get the activity from the ActivityExecutionStatusChangedEventArgs, then... 
activity.UnregisterForStatusChange(Activity.ClosedEvent, this); 
ActivityExecutionContextManager executionContextManager = executionContext.ExecutionContextManager; 

// close the child activity's execution context 
executionContextManager.CompleteExecutionContext(executionContextManager.GetExecutionContext(activity)); 
Questions connexes