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;} } | |
 
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号