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 に答える