ConditionedActivityGroup
1.可以通过定义条件触发CAG组中的某个Activity
2.拖入CAG中的每各个Activity 都有一个When Condition ,
When Condition有两种方式,一种是CodeCondition 一种是RuleConditionReferences
当When Condition条件满足时,在CAG的每个轮询周期内,该Activity 会执行一次
Activity 的When Condition可以不设,这时,该Activity只在第一次轮询时被执行,以后的轮询都不会被执行了3.CAG有一个Until condition 属性,条件成立时,该CAG就退出轮询,结点完成
CAG轮询每一次新轮询开始时,会查看Until condition ,如果条件成立就退出,完成结点
CAG的Until condition 属性可以不设,这时只CAG轮询不到When Condition条件成立还成立的Activity时,才完成结点
4.在CAG的每个轮询周期内,只要有Activity的When Condition条件成立,该Activity就会被执行一次
在下一个CAG轮询周期内,如果该Activity的When Condition条件成立还成立,仍会被执行,直到When Condition条件不成立
5.如果控制不好Activity的When Condition,与CAG的Until condition,可能会出现一个死循环
例:
bool 标记A = true; bool 标记B = true; int 标记I = 0; bool 标记CAG = false; //是否退出CAG |
||
CAG |
规则 |
this.标记CAG == True |
结点代码 |
无 |
|
A |
规则 |
private void A_规则(object sender, ConditionalEventArgs e) { e.Result = 标记A;} |
结点代码 |
private void A_ExecuteCode(object sender, EventArgs e) { Console.WriteLine("标记A对应的Activity"); 标记A = false; //可以去掉此处再看一下效果 } |
|
B |
规则 |
private void B_规则(object sender, ConditionalEventArgs e) { e.Result = 标记B;} |
结点代码 |
private void B_ExecuteCode(object sender, EventArgs e) { Console.WriteLine("标记B对应的Activity"); // 标记B = false; //可以打开此处再看一下效果 } |
|
I |
规则 |
this.标记I <= 10 |
结点代码 |
private void I_ExecuteCode(object sender, EventArgs e) { 标记I = 标记I + 1; Console.WriteLine("标记I:" + 标记I.ToString()); } |
|
N |
规则 |
无 |
结点代码 |
private void N_ExecuteCode(object sender, EventArgs e) {Console.WriteLine("没有绑定规则的Activity只运行一次");} |
|
CAG_ manager |
规则 |
1 == 1 |
结点代码 |
private void CAG_manager_ExecuteCode(object sender, EventArgs e) { Console.WriteLine("------------------"); if (标记I == 10) { 标记CAG = true;} } |