Replicator活动

xiaoxiao2026-08-27  2

使用 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(); } } } } 相关资源:敏捷开发V1.0.pptx
转载请注明原文地址: https://www.6miu.com/read-5051939.html

最新回复(0)