0

我正在尝试使用 WF3.5 编写自定义 CompositeActivity。类似于 WhileActivity 的东西。

问题是当我想再次执行子活动时(它之前通过对 ActivityExecutionContext.CloseActivity() 的最终调用成功)我得到一个 InvalidOperationException,并显示以下消息:“活动状态必须为执行“初始化”。

从调试问题来看,子活动的 ExecutionStatus 似乎是 Closed 并且它的 ExecutionResult 是 Uninitialized。

但是ActivityExecutionContext.ExecuteActivity的 MSDN 文档说“如果状态为 Closed,则 Activity 被初始化并执行”。

那么为什么我会得到这个异常,我该如何避免呢?

谢谢,朱利安

4

1 回答 1

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));
于 2009-11-26T22:06:15.610 回答