2009-11-26 6 views
0

Я пытаюсь написать пользовательский CompositeActivity, используя WF3.5. Что-то вроде WhileActivity.Выполнение дочерней активности во второй раз

Проблема заключается в том, когда я хочу снова выполнить дочернее действие (ранее это было выполнено с окончательным вызовом ActivityExecutionContext.CloseActivity()) Я получаю InvalidOperationException с этим сообщением: «Статус активности должен быть« Инициализирован »для выполнения ».

От отладки проблемы, кажется, что ExecutionStatus дочерней активности закрыт, а ExecutionResult не инициализирован.

Но в документе MSDN для ActivityExecutionContext.ExecuteActivity указано, что «Если статус закрыт, операция инициализируется и выполняется».

Так почему я получаю это исключение и как его избежать?

Спасибо, Julien

ответ

1

Я думаю, я нашел ответ. Составной активности необходимо создать новый ActivityExecutionContext для дочерней активности каждый раз, когда он хочет начать дочернюю активность.

Выполнение ребенка деятельность в новом 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); 

Очистка после деятельности Закрыто:

// 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));