当前位置: 首页>>代码示例>>C#>>正文


C# WorkflowDesignerLoader.PerformLoad方法代码示例

本文整理汇总了C#中System.Workflow.ComponentModel.Design.WorkflowDesignerLoader.PerformLoad方法的典型用法代码示例。如果您正苦于以下问题:C# WorkflowDesignerLoader.PerformLoad方法的具体用法?C# WorkflowDesignerLoader.PerformLoad怎么用?C# WorkflowDesignerLoader.PerformLoad使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。


在下文中一共展示了WorkflowDesignerLoader.PerformLoad方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: PerformLoad

protected override void PerformLoad(IDesignerSerializationManager serializationManager)
{
    IDesignerHost designerHost = (IDesignerHost)GetService(typeof(IDesignerHost));
    Activity rootActivity = null;

    // If a WorkflowType already exists, create an instance instead of reading from file
    if (WorkflowType != null)
    {
        rootActivity = (Activity)Activator.CreateInstance(WorkflowType);
    }
    else
    {
        // Create a text reader out of the doc data
        TextReader reader = new StringReader(this.xoml);
        try
        {
            using (XmlReader xmlReader = XmlReader.Create(reader))
            {
                WorkflowMarkupSerializer xomlSerializer = new WorkflowMarkupSerializer();
                rootActivity = xomlSerializer.Deserialize(xmlReader) as Activity;
            }
        }
        finally
        {
            reader.Close();
        }
    }

    if (rootActivity != null && designerHost != null)
    {
        AddObjectGraphToDesignerHost(designerHost, rootActivity);
    }
}

private static void AddObjectGraphToDesignerHost(IDesignerHost designerHost, Activity activity)
{
    Guid Definitions_Class = new Guid("3FA84B23-B15B-4161-8EB8-37A54EFEEFC7");

    if (designerHost == null)
        throw new ArgumentNullException("designerHost");
    if (activity == null)
        throw new ArgumentNullException("activity");

    string rootSiteName = activity.QualifiedName;
    if (activity.Parent == null)
    {
        string fullClassName = activity.UserData[Definitions_Class] as string;
        if (fullClassName == null)
            fullClassName = activity.GetType().FullName;
        rootSiteName = (fullClassName.LastIndexOf('.') != -1) ? fullClassName.Substring(fullClassName.LastIndexOf('.') + 1) : fullClassName;
        designerHost.Container.Add(activity, rootSiteName);
    }
    else
    {
        designerHost.Container.Add(activity, activity.QualifiedName);
    }

    if (activity is CompositeActivity)
    {
        foreach (Activity activity2 in GetNestedActivities(activity as CompositeActivity))
            designerHost.Container.Add(activity2, activity2.QualifiedName);
    }
}

private static Activity[] GetNestedActivities(CompositeActivity compositeActivity)
{
    if (compositeActivity == null)
        throw new ArgumentNullException("compositeActivity");

    IList<Activity> childActivities = null;
    ArrayList nestedActivities = new ArrayList();
    Queue compositeActivities = new Queue();
    compositeActivities.Enqueue(compositeActivity);
    while (compositeActivities.Count > 0)
    {
        CompositeActivity compositeActivity2 = (CompositeActivity)compositeActivities.Dequeue();
        childActivities = compositeActivity2.Activities;

        foreach (Activity activity in childActivities)
        {
            nestedActivities.Add(activity);
            if (activity is CompositeActivity)
                compositeActivities.Enqueue(activity);
        }
    }
    return (Activity[])nestedActivities.ToArray(typeof(Activity));
}
开发者ID:.NET开发者,项目名称:System.Workflow.ComponentModel.Design,代码行数:87,代码来源:WorkflowDesignerLoader.PerformLoad


注:本文中的System.Workflow.ComponentModel.Design.WorkflowDesignerLoader.PerformLoad方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。