WF-Activity高级篇-Replicator
[ 2006-02-04 22:15:08 | Author: ccBoy ]
Replicator Activity
简单的说,Replicator可以在运行时刻,建立某个Activity 的N的实例。通俗的说,被设计成这样一种场景,你需要执行一个Activity N次得到某个结果。有时候对于N等于几,只有WF引擎知道,这个场景下,它非常像C#的Foreach 操作,而不是for .
很多的业务场景中可以用Replicator 来展现:
在运行时刻Replicator 将通过CurrentChildData 中的个数启动同样数量Activity的实例,然后可以控制串行还是并行的运行这些Activity的实例。默认的情况下,所有该Activity的实例执行完成,则Replicator完成。Replicator也有一个UntilCondition 条件,所有如果UntilCondition满足,那么Replicator也会取消或中断正在运行的所有实例,而退出。
因为Replicator 是一个容器,所有你需要关注它的两个事件:
ReplicatorChildEventArgs 包含两个对象一个是Activity, 代表当前子Activity 实例的引用,通过这个应用你可以访问子Activity 中定义的属性和数据对象。而另外一个是InstanceData,这个数据就是容器-Replicator 初始化方法Initialized方法中数据,也就是CurrentChildData 属性,这个属性在Beta1是ArrayList ,在Beta2中是一个IList对象。运行时刻每建立一个子Activity 的实例,就会从这个IList中取出一个对象作为该实例使用的数据
比如
ReplicatorActivity1.CurrentChildData.Add("Child Instance 1");
ReplicatorActivity1.CurrentChildData.Add("Child Instance 2");
ReplicatorActivity1.CurrentChildData.Add("Child Instance 3");
ReplicatorActivity1.CurrentChildData.Add("Child Instance 4");
那么运行时刻将会串行或并行的创建4个子Activity实例,每个实例拥有一个自己的字符数据-Child Instance #。
当然有空你要熟悉一下 DP(DependencyProperty )这个在WinFX 中是一个非常重要的对象和概念。
ms-help://MS.MSSDK.1033/MS.WinFXSDK.1033/Wcp_conceptual/html/d119d00c-3afb-48d6-87a0-c4da4f83dee5.htm
Replicator 很像一个线程池,子Activity 就是线程方法,CurrentChildData决定了线程池中活动线程的数量,ExecutionType则控制活动线程是并发还是串行的产生和执行方法,InstanceData 则是每个活动线程能够使用的数据。任何在运行时需要多个实例或需要多次运行一个Activity获得结果的场景,你都可以考虑使用Replicator Activity。
ver: 1.01
注意-文章原创作品版权所有,不得擅自转载或以其它方式的传播
Comments Feed: http://www.dotnettools.org/Blog/feed.asp?q=comment&id=79
简单的说,Replicator可以在运行时刻,建立某个Activity 的N的实例。通俗的说,被设计成这样一种场景,你需要执行一个Activity N次得到某个结果。有时候对于N等于几,只有WF引擎知道,这个场景下,它非常像C#的Foreach 操作,而不是for .
很多的业务场景中可以用Replicator 来展现:
- 最典型的是投票的场景,多个人参与投票,每个人给出自己的选择,最后产生一个投票的结果
- 多人多环节的业务审批,分组的审议
- 在运行时刻,根据提供的数据动态的产生多个工作流处理实例
在运行时刻Replicator 将通过CurrentChildData 中的个数启动同样数量Activity的实例,然后可以控制串行还是并行的运行这些Activity的实例。默认的情况下,所有该Activity的实例执行完成,则Replicator完成。Replicator也有一个UntilCondition 条件,所有如果UntilCondition满足,那么Replicator也会取消或中断正在运行的所有实例,而退出。
因为Replicator 是一个容器,所有你需要关注它的两个事件:
- Initialized -ReplicatorActivity 初始化的时候触发该事件,最常见的是在这里定义ReplicatorActivity 的ExecutionType
- Completed -ReplicatorActivity 完成时会调用这个方法,经常在这里获得最后的结果,比如投票的结果
- ChildInitialized-每次创建子Activity 实例时会执行这个方法
- ChildCompleted -每次子Activity 实例完成时会调用这个方法
ReplicatorChildEventArgs 包含两个对象一个是Activity, 代表当前子Activity 实例的引用,通过这个应用你可以访问子Activity 中定义的属性和数据对象。而另外一个是InstanceData,这个数据就是容器-Replicator 初始化方法Initialized方法中数据,也就是CurrentChildData 属性,这个属性在Beta1是ArrayList ,在Beta2中是一个IList对象。运行时刻每建立一个子Activity 的实例,就会从这个IList中取出一个对象作为该实例使用的数据
比如
ReplicatorActivity1.CurrentChildData.Add("Child Instance 1");
ReplicatorActivity1.CurrentChildData.Add("Child Instance 2");
ReplicatorActivity1.CurrentChildData.Add("Child Instance 3");
ReplicatorActivity1.CurrentChildData.Add("Child Instance 4");
那么运行时刻将会串行或并行的创建4个子Activity实例,每个实例拥有一个自己的字符数据-Child Instance #。
当然有空你要熟悉一下 DP(DependencyProperty )这个在WinFX 中是一个非常重要的对象和概念。
ms-help://MS.MSSDK.1033/MS.WinFXSDK.1033/Wcp_conceptual/html/d119d00c-3afb-48d6-87a0-c4da4f83dee5.htm
Replicator 很像一个线程池,子Activity 就是线程方法,CurrentChildData决定了线程池中活动线程的数量,ExecutionType则控制活动线程是并发还是串行的产生和执行方法,InstanceData 则是每个活动线程能够使用的数据。任何在运行时需要多个实例或需要多次运行一个Activity获得结果的场景,你都可以考虑使用Replicator Activity。
ver: 1.01
注意-文章原创作品版权所有,不得擅自转载或以其它方式的传播
[Last Modified By ccBoy, at 2006-02-06 00:57:59]
Comments Feed: http://www.dotnettools.org/Blog/feed.asp?q=comment&id=79
There is no comment on this article.
You can't post comment on this article.






