private void FillMainStreamForDisplayActivities(IWfActivityDescriptor actDesp, List <WfMainStreamActivityDescriptor> msActivities)
        {
            string actKey = string.Empty;

            if (!string.IsNullOrEmpty(actDesp.AssociatedActivityKey))
            {
                actKey = actDesp.AssociatedActivityKey;
            }
            else
            {
                actKey = actDesp.Key;
            }

            List <WfMainStreamActivityDescriptor> cloneActivities = new List <WfMainStreamActivityDescriptor>();

            foreach (var innerAct in msActivities)
            {
                if (innerAct.Activity.Key == actKey || (innerAct.Activity.AssociatedActivityKey != null && innerAct.Activity.AssociatedActivityKey == actKey))
                {
                    cloneActivities.Add(new WfMainStreamActivityDescriptor(actDesp));
                    break;
                }
                cloneActivities.Add(innerAct);
            }
            msActivities.Clear();
            cloneActivities.ForEach(c => msActivities.Add(c));
            if (msActivities.Find(act => act.Activity.Key == actKey || (act.Activity.AssociatedActivityKey != null && act.Activity.AssociatedActivityKey == actKey)) == null)
            {
                msActivities.Add(new WfMainStreamActivityDescriptor(actDesp));
            }

            //查找经过的线
            IWfTransitionDescriptor transition = actDesp.ToTransitions.FindElapsedTransition();

            if (transition != null && transition.IsBackward == true)
            {
                transition = null;
            }
            if (transition == null)
            {
                //如果经过的线不存在,则查找缺省的线或优先级最高的线
                WfTransitionDescriptorCollection transitions = actDesp.ToTransitions.GetAllCanTransitForwardTransitions();
                transition = transitions.FindDefaultSelectTransition();
            }

            if (transition == null)
            {
                transition = actDesp.ToTransitions.FindDefaultSelectTransition();
            }
            if (transition != null && transition.IsBackward == true)
            {
                transition = null;
                transition = actDesp.ToTransitions.Find(t => t.IsBackward == false);
            }

            if (transition != null)
            {
                bool flag = msActivities.Find(a => a.Activity.Key == transition.ToActivity.Key) == null;

                if (flag)
                {
                    FillMainStreamForDisplayActivities(transition.ToActivity, msActivities);
                }
            }
        }
        private void InnerFillMainStreamActivities(IWfActivityDescriptor actDesp, List <WfMainStreamActivityDescriptor> msActivities, Dictionary <string, IWfActivityDescriptor> elapsedActivities)
        {
            if (elapsedActivities.ContainsKey(actDesp.Key))
            {
                return;
            }

            elapsedActivities.Add(actDesp.Key, actDesp);

            string actKey = actDesp.GetAssociatedActivity() != null?actDesp.GetAssociatedActivity().Key : actDesp.Key;

            int position = -1;

            for (int i = msActivities.Count - 1; i >= 0; i--)
            {
                if (msActivities[i].Activity.Key == actKey || msActivities[i].Activity.AssociatedActivityKey == actKey)
                {
                    position = i;
                    break;
                }
            }

            if (position >= 0)  //替换为最新的活动
            {
                msActivities[position] = new WfMainStreamActivityDescriptor(actDesp);
            }
            else
            {
                msActivities.Add(new WfMainStreamActivityDescriptor(actDesp));
            }

            //2012/5/2,也许需要调整一下次序,符合条件的优先,然后是经过的线
            //查找经过的线
            IWfTransitionDescriptor transition = null;

            //如果流程描述,不是实例中保存的主线流程描述,则从经过的线查找
            if (this.Variables.GetValue("MainStream", false) == false)
            {
                transition = actDesp.ToTransitions.FindElapsedTransition();
            }

            if (transition != null && transition.IsBackward == true)
            {
                transition = null;
            }

            if (transition == null)
            {
                //如果经过的线不存在,则查找缺省的线或优先级最高的线
                WfTransitionDescriptorCollection transitions = actDesp.ToTransitions.GetAllCanTransitForwardTransitions();
                transition = transitions.FindDefaultSelectTransition();
            }

            if (transition == null)
            {
                transition = actDesp.ToTransitions.FindDefaultSelectTransition();
            }

            if (transition != null && transition.IsBackward == true)
            {
                transition = null;
                transition = actDesp.ToTransitions.Find(t => t.IsBackward == false);
            }

            if (transition != null)
            {
                InnerFillMainStreamActivities(transition.ToActivity, msActivities, elapsedActivities);
            }
        }