⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 while.cs

📁 WF本质论一书的源码,要书籍的朋友同我联系.
💻 CS
字号:
using System;
using System.Workflow.ComponentModel;

namespace EssentialWF.Activities {
    public sealed class ConstantCondition : ActivityCondition 
    {
      public static readonly DependencyProperty BooleanValueProperty = DependencyProperty.Register("BooleanValue",typeof(bool), typeof(ConstantCondition),new PropertyMetadata(DependencyPropertyOptions.Metadata));
      public bool BooleanValue {
        get {return (bool)GetValue(BooleanValueProperty);}
        set { SetValue(BooleanValueProperty, value); }
      }
      public override bool Evaluate(Activity activity, IServiceProvider provider) {
        return this.BooleanValue;
      }
    }

    public sealed class ConstantLoopCondition : ActivityCondition {
        private int counter = 0;
        public static readonly DependencyProperty MaxCountProperty = DependencyProperty.Register("MaxCount",typeof(int),typeof(ConstantLoopCondition),new PropertyMetadata(DependencyPropertyOptions.Metadata));
        public int MaxCount {
            get {return (int)GetValue(MaxCountProperty); }
            set { SetValue(MaxCountProperty,value); }
        }
	
        public override bool Evaluate(Activity activity, IServiceProvider provider) {
            return counter++ < this.MaxCount;
        }
    }

    public class While : CompositeActivity {
        public static readonly DependencyProperty ConditionProperty = DependencyProperty.Register("Condition",typeof(ActivityCondition),typeof(While),new PropertyMetadata(DependencyPropertyOptions.Metadata));
        public ActivityCondition Condition {
            get {
                return GetValue(ConditionProperty)
            as ActivityCondition;
            }

            set { SetValue(ConditionProperty, value); }
        }

        protected override ActivityExecutionStatus Execute(ActivityExecutionContext context) {
            if (Condition != null && Condition.Evaluate(this, context)) {
                ExecuteBody(context);
                return ActivityExecutionStatus.Executing;
            }

            return ActivityExecutionStatus.Closed;
        }

        void ExecuteBody(ActivityExecutionContext context) {
            ActivityExecutionContextManager manager = context.ExecutionContextManager;
            ActivityExecutionContext newContext = manager.CreateExecutionContext(EnabledActivities[0]);
            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 && Condition != null && Condition.Evaluate(this, context))
                ExecuteBody(context);
            else
                context.CloseActivity();
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -