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 ,如果条件成立就退出,完成结点

 CAGUntil condition 属性可以不设,这时只CAG轮询不到When Condition条件成立还成立的Activity时,才完成结点



 

4.CAG的每个轮询周期内,只要有ActivityWhen Condition条件成立,该Activity就会被执行一次

 在下一个CAG轮询周期内,如果该ActivityWhen Condition条件成立还成立,仍会被执行,直到When Condition条件不成立

 


5.
如果控制不好ActivityWhen Condition,与CAGUntil 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;}        }


posted @ 2006-10-12 22:30  WXWinter(冬)  阅读(1909)  评论(5编辑  收藏  举报