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();
};
[b] 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);[/b]
instance.Start();

waitHandle.WaitOne();
}
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值