Replicator活动

使用 ReplicatorActivity 活动可以在运行时创建单个活动的任意多个实例。 每个 ReplicatorActivity 活动都只能包含一个子活动,但该子活动可以是复合活动。

默认情况下,ReplicatorActivity 活动在所有子活动都已完成时完成。 您可以使用 UntilCondition 属性,在子活动实例完成之前停止执行 ReplicatorActivity。
ReplicatorActivity 需要两条关键信息:

ExecutionType 属性必须设置为 Sequential 或 Parallel。 ExecutionType 属性指示复制的子活动实例是以并行方式还是顺序方式执行。如果是以并行方式执行,则将在 ReplicatorActivity 活动执行时创建所有实例;如果是以顺序方式执行,则将依次执行子活动的每个实例,即:前一个实例完成后再执行下一个实例。

必须填充 InitialChildData 集合属性,以便为子活动的每个复制实例提供数据。

可以实现在 ReplicatorActivity 开始执行之前引发的 Initialized 处理程序,以填充 InitialChildData 集合属性并设置 ExecutionType。

还可以指定使以下事件可以与 ReplicatorActivity 活动一起使用的处理程序:

ChildInitialized 事件在每次初始化子活动的实例时都会引发,它将 InitialChildData 集合的该项中的数据传递给要初始化的子活动的实际实例。ReplicatorChildEventArgs 包含该处理程序的事件参数。

每当子活动的实例完成时都会引发的 ChildCompleted 事件。ReplicatorChildEventArgs 包含此处理程序的事件参数。

在 ReplicatorActivity 完成后引发的 Completed 事件。

当子活动执行多次时,会为每次迭代创建子活动的一个单独实例。 这样便可以单独执行实例(对于 ConditionedActivityGroup 活动,可能会以并行方式执行实例)。 因此,活动树(称为模板)中的活动的定义永远不会执行,并总是处于 Initialized 状态。 对模板的运行实例的访问由作为模板父级的复合活动提供。 例如,对于 ReplicatorActivity 活动,可能存在多个活动的实例,从而使得 ReplicatorActivity.DynamicActivities 返回子活动的运行实例的集合。
首先拖进一个Replicator 和 一个Code活动到wrokflow1.cs
然后向其中添加如下代码:
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Collections;
using System.Drawing;
using System.Linq;
using System.Workflow.ComponentModel.Compiler;
using System.Workflow.ComponentModel.Serialization;
using System.Workflow.ComponentModel;
using System.Workflow.ComponentModel.Design;
using System.Workflow.Runtime;
using System.Workflow.Activities;
using System.Workflow.Activities.Rules;
namespace WorkflowConsoleApplication2
{
    public sealed partial class Workflow1 : SequentialWorkflowActivity
    {
        private String vote;
        private int countAll = 0;
        private String result = String.Empty;
        private ArrayList array;

        public int CountAll
        {
            get { return countAll; }
        }

        public String Result
        {
            get { return result; }
        }

        public ArrayList ArrayL
        {
            get { return array; }
            set { array = value; }
        }

        public Workflow1()
        {
            InitializeComponent();
        }

        private void replicatorActivity1_Initialized(object sender, EventArgs e)
        {
            this.replicatorActivity1.InitialChildData = array;
        }

        private void codeActivity1_ExecuteCode(object sender, EventArgs e)
        {
            countAll++;
        }

        private void replicatorActivity1_ChildInitialized(object sender, ReplicatorChildEventArgs e)
        {
            vote = e.InstanceData as String;
            vote = "您给" + vote + "投了票";
            System.Console.WriteLine(vote);
        }

        private void replicatorActivity1_ChildCompleted(object sender, ReplicatorChildEventArgs e)
        {
            result = result + "\n" + vote;
            System.Console.WriteLine("completed" + countAll);
        }

        private void replicatorActivity1_Completed(object sender, EventArgs e)
        {
            System.Console.WriteLine("all completed");
        }
    }

}


将Program.cs中的代码修改如下:
using System.Linq;
using System.Text;
using System.Threading;
using System.Workflow.Runtime;
using System.Workflow.Runtime.Hosting;
using System.Collections;
namespace WorkflowConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            using(WorkflowRuntime workflowRuntime = new WorkflowRuntime())
            {
                AutoResetEvent waitHandle = new AutoResetEvent(false);
                workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e) {waitHandle.Set();};
                workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e)
                {
                    Console.WriteLine(e.Exception.Message);
                    waitHandle.Set();
                };
               Dictionary<string, object> dic = new Dictionary<string, object>();
                ArrayList list = new ArrayList();
                list.Add("chenyuan");
                list.Add("yuanchen");
                dic.Add("ArrayL",list);
                WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(WorkflowConsoleApplication2.Workflow1),dic);

                instance.Start();

                waitHandle.WaitOne();
            }
        }
    }
}

你可能感兴趣的:(workflow,活动,LINQ)