dowhile.cs
来自「WF本质论一书的源码,要书籍的朋友同我联系.」· CS 代码 · 共 49 行
CS
49 行
using System;
using System.Workflow.ComponentModel;
namespace EssentialWF.Activities {
public class DoWhile : CompositeActivity {
public static readonly DependencyProperty CompletionConditionProperty = DependencyProperty.Register("CompletionCondition",typeof(ActivityCondition),typeof(DoWhile),new PropertyMetadata(DependencyPropertyOptions.Metadata));
public ActivityCondition CompletionCondition {
get { return GetValue(CompletionConditionProperty) as ActivityCondition; }
set { SetValue(CompletionConditionProperty, value); }
}
protected override ActivityExecutionStatus Execute(ActivityExecutionContext context) {
ExecuteBody(context);
return ActivityExecutionStatus.Executing;
}
void ExecuteBody(ActivityExecutionContext context) {
ActivityExecutionContextManager manager = context.ExecutionContextManager;
Activity template = this.EnabledActivities[0];
ActivityExecutionContext newContext = manager.CreateExecutionContext(template);
Activity newActivity = newContext.Activity;
newActivity.Closed += this.ContinueAt;
newContext.ExecuteActivity(newActivity);
}
void ContinueAt(object sender, ActivityExecutionStatusChangedEventArgs e) {
e.Activity.Closed -= this.ContinueAt;
ActivityExecutionContext context = sender as ActivityExecutionContext;
ActivityExecutionContextManager manager = context.ExecutionContextManager;
ActivityExecutionContext innerContext = manager.GetExecutionContext(e.Activity);
manager.CompleteExecutionContext(innerContext);
if (this.ExecutionStatus == ActivityExecutionStatus.Executing) {
if ((CompletionCondition == null) || (CompletionCondition.Evaluate(this, context)))
ExecuteBody(context);
else
context.CloseActivity();
}
}
//cancellation/fault handling logic omitted
//...
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?