zoukankan      html  css  js  c++  java
  • WF4B1 的Procedural Activity 之Sequence,Delay,Pick,PickBranch,Parallel,ForEach,ForEach<T>使用

    WF4B1 的Procedural Activity 之Sequence,Delay,Pick,PickBranch,Parallel,ForEach,ForEach<T>使用

     

    目录

    1.1    Sequence 顺序容器    1

    1.2    Delay 延时    1

    1.2.1    例    1

    1.3    Pick 与 PickBranch    2

    1.3.1    Pick 中的 PickBranch是单线执行的    2

    1.3.2    例    2

    1.4    Parallel 并行容器    3

    1.4.1    例    4

    1.5    ForEach 循环    5

    1.5.1    Values属性    5

    1.5.2    例    6

    1.6    ForEach<T> 循环    7

    1.6.1    例    7

     

     

     

     

    Sequence 顺序容器

    类名: System.Activities.Statements.Sequence

    基类: NativeActivity

    文件: System.Activities.dll

    类型: sealed

    说明: 1.[Activities]集合,可以存放Activity

    2.[Activities]集合中的Activity按顺序从上向下执行

    3.默认为[顺序工作流]的根容器

     

    Delay 延时

     

    类名: System.Activities.Statements.Delay

    基类: NativeActivity ,

    接口: System.Activities.IActivityExtensionProvider

    文件: System.Activities.dll

    类型: sealed

    说明: 1.延迟,按指定的时间阻止当前的工作流执行。 持续时间过期后,工作流继续执行

    2.[Duration]属性,类型为System.Activities.InArgument<System.TimeSpan>,表示阻止当前的工作流执行的时间

    3.不触发[OnIdel]

     

    流程

    <p:Activity mc:Ignorable=""

    x:Class="WorkflowConsoleApplication3.Sequence1"

    xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities/design"

    xmlns:__Sequence1="clr-namespace:WorkflowConsoleApplication3;"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

    xmlns:p="http://schemas.microsoft.com/netfx/2009/xaml/activities"

    xmlns:sad="clr-namespace:System.Activities.Debugger;assembly=System.Activities"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <p:Sequence >

    <p:WriteLine DisplayName="WriteLine(print:begin+Now)">["begin:" + System.DateTime.Now.ToString()]</p:WriteLine>

    <p:Delay DisplayName="Delay(10秒)">[New TimeSpan(0, 0, 10)]</p:Delay>

    <p:WriteLine DisplayName="WriteLine(print:begin+Now)">["end:" + System.DateTime.Now.ToString()]</p:WriteLine>

    </p:Sequence>

    </p:Activity>

    宿主

     

    WorkflowInstance myInstance = new WorkflowInstance(new Sequence1());

     

    myInstance.Run();

     

    System.Console.Read();

    结果

     

    Pick 与 PickBranch

    类名: System.Activities.Statements.Pick

    基类: NativeActivity

    文件: System.Activities.dll

    类型: sealed

    说明: 1.[Pick]触发容器,提供了基于事件的控制流。

    2.[Branches]集合的类型为[System.Collections.ObjectModel.Collection<System.Activities.Statements.PickBranch>]

    是子控件集合, 只能添加[PickBranch]

     

    类名: System.Activities.Statements.PickBranch

    基类: object

    文件: System.Activities.dll

    类型: sealed

    说明: 1.[Pick]触发容器的分支。 [PickBranch] 只可添加到[Pick]中

    2.[Trigger] 属性,只能放入触发类Activity

    3.[Action] 当[Trigger] 被触发时,所要执行的Activity

     

     

    Pick 中的 PickBranch是单线执行的

    1. 只要有一个[PickBranch]的[Trigger]被触发,其他[PickBranch]就不会被触发了

    2. 即使在被执行的[PickBranch]还没完成时,其他[PickBranch]也不会被触发

     

     

    流程

    <p:Activity mc:Ignorable=""

    x:Class="WorkflowConsoleApplication3.Sequence1"

    xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities/design"

    xmlns:__Sequence1="clr-namespace:WorkflowConsoleApplication3;"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

    xmlns:p="http://schemas.microsoft.com/netfx/2009/xaml/activities"

    xmlns:sad="clr-namespace:System.Activities.Debugger;assembly=System.Activities"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <p:Sequence >

    <p:WriteLine>["begin"]</p:WriteLine>

    <p:Pick>

    <p:PickBranch>

    <p:PickBranch.Trigger>

    <p:Delay>[New TimeSpan(0, 0, 10)]</p:Delay>

    </p:PickBranch.Trigger>

    <p:WriteLine>["10"]</p:WriteLine>

    </p:PickBranch>

    <p:PickBranch>

    <p:PickBranch.Trigger>

    <p:Delay>[New TimeSpan(0, 0, 5)]</p:Delay>

    </p:PickBranch.Trigger>

    <p:WriteLine>["5"]</p:WriteLine>

    </p:PickBranch>

    </p:Pick>

    <p:WriteLine>["end"]</p:WriteLine>

    </p:Sequence>

    </p:Activity>

    宿主

    WorkflowInstance myInstance = new WorkflowInstance(new Sequence1());

    myInstance.Run();

    System.Console.Read();

    结果

     

    Parallel 并行容器

    类名: System.Activities.Statements.Parallel

    基类: object

    文件: System.Activities.dll

    类型: sealed

    说明: 1.[Branches]集合的类型为System.Collections.ObjectModel.Collection<System.Activities.WorkflowElement>,容器会并行执行容器内的所有Activity

    2.[CompletionCondition] 属性[System.Activities.WorkflowElement<bool>],当[ CompletionCondition 属性]为真时,完成

     

     

     

     

    流程

    <p:Activity mc:Ignorable=""

    x:Class="WorkflowConsoleApplication3.Sequence1"

    xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities/design"

    xmlns:__Sequence1="clr-namespace:WorkflowConsoleApplication3;"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

    xmlns:p="http://schemas.microsoft.com/netfx/2009/xaml/activities"

    xmlns:sad="clr-namespace:System.Activities.Debugger;assembly=System.Activities"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <p:Sequence >

    <p:WriteLine DisplayName="WriteLine(print:begin+Now)">["begin:" + System.DateTime.Now.ToString()]</p:WriteLine>

    <p:Parallel>

    <p:Sequence>

    <p:Delay DisplayName="Delay(10秒)">[New TimeSpan(0, 0, 10)]</p:Delay>

    <p:WriteLine DisplayName="WriteLine(print:&quot;A&quot;)">["A"]</p:WriteLine>

    </p:Sequence>

    <p:Sequence>

    <p:Delay DisplayName="Delay(15秒)">[New TimeSpan(0, 0, 15)]</p:Delay>

    <p:WriteLine DisplayName="WriteLine(print:&quot;B&quot;)">["B"]</p:WriteLine>

    </p:Sequence>

    </p:Parallel>

    <p:WriteLine DisplayName="WriteLine(print:begin+Now)">["end:" + System.DateTime.Now.ToString()]</p:WriteLine>

    </p:Sequence>

    </p:Activity>

    宿主

    WorkflowInstance myInstance = new WorkflowInstance(new Sequence1());

    myInstance.Run();

    System.Console.Read();

    结果

     

    ForEach 循环

    类名: System.Activities.Statements.ForEach

    基类: NativeActivity

    文件: System.Activities.dll

    类型: sealed

    说明: 1.循环[Values]属性所指定的集合中的值,[Values]属性可指定到[object]对象上

    2.可在[ForEach]内部添加[Activity]用以操作循环的[item],只能添加一个[Activity],[Activity]内部的子[Activity]也可访问[item]

    3.使用[ForEach]时,内部[item]在表达式输入框中为[object]类型,可以使用[ForEach<T>],这样内部[item]在表达式输入框中为<T>

     

    Values属性

    有时设不上,要到xaml中手写

    <p:Activity

    mc:Ignorable="" x:Class="WorkflowConsoleApplication5.Sequence1"

    xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities/design"

     

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:p="http://schemas.microsoft.com/netfx/2009/xaml/activities"

    xmlns:s="clr-namespace:System;assembly=mscorlib"

    xmlns:sad="clr-namespace:System.Activities.Debugger;assembly=System.Activities"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib"

     

    >

    <x:Members>

    <x:Property Name="myInputCollection" Type="p:InArgument(scg:IEnumerable(x:String))" />

    </x:Members>

     

    <p:Sequence>

    <p:ForEach Values="[myInputCollection]">

    <p:ActivityAction x:TypeArguments="s:Object">

    <p:ActivityAction.Argument>

    <p:Variable x:TypeArguments="s:Object" Name="item" />

    </p:ActivityAction.Argument>

    <p:WriteLine>[item]</p:WriteLine>

    </p:ActivityAction>

    </p:ForEach>

    </p:Sequence>

    </p:Activity>

     

     

     

    流程

    <p:Activity

    mc:Ignorable="" x:Class="WorkflowConsoleApplication5.Sequence1"

    xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities/design"

     

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:p="http://schemas.microsoft.com/netfx/2009/xaml/activities"

    xmlns:s="clr-namespace:System;assembly=mscorlib"

    xmlns:sad="clr-namespace:System.Activities.Debugger;assembly=System.Activities"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:scg="clr-namespace:System.Collections.Generic;assembly=mscorlib"

    >

    <x:Members>

    <x:Property Name="myInputCollection" Type="p:InArgument(scg:IEnumerable(x:String))" />

    </x:Members>

     

    <p:Sequence>

    <p:ForEach Values="[myInputCollection]">

    <p:ActivityAction x:TypeArguments="s:Object">

    <p:ActivityAction.Argument>

    <p:Variable x:TypeArguments="s:Object" Name="item" />

    </p:ActivityAction.Argument>

    <p:WriteLine>[item]</p:WriteLine>

    </p:ActivityAction>

    </p:ForEach>

    </p:Sequence>

    </p:Activity>

    宿主

    Dictionary<string, object> inputCollection = new Dictionary<string, object>();

     

    List<string> list = new List<string>();

     

    list.Add("wxd");

    list.Add("lzm");

    list.Add("wxwinter");

     

    inputCollection.Add("myInputCollection", list );

     

     

    WorkflowInstance myInstance = new WorkflowInstance(new Sequence1(), inputCollection);

     

    myInstance.Run();

     

    System.Console.Read();

    结果

     

     

     

    ForEach<T> 循环

    类名: System.Activities.Statements.ForEach<T>

    基类: NativeActivity

    文件: System.Activities.dll

    类型: sealed

    说明: 1.与[ForEach]不同的是,内部[item]在表达式输入框中为<T>

    2.在添加[ForEach<T>]时,需要为内部[item]指定类型

    3.其他使用与[ForEach]相同

     

     

    流程

    <p:Activity mc:Ignorable=""

    x:Class="WorkflowConsoleApplication5.Sequence1"

    xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities/design"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

    xmlns:p="http://schemas.microsoft.com/netfx/2009/xaml/activities"

    xmlns:s="clr-namespace:System;assembly=mscorlib"

    xmlns:sad="clr-namespace:System.Activities.Debugger;assembly=System.Activities"

    xmlns:w="clr-namespace:WorkflowConsoleApplication5;assembly=WorkflowConsoleApplication5"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <x:Members>

    <x:Property Name="myInputCollection" Type="p:InArgument(s:Object)" />

    </x:Members>

    <p:Sequence>

    <p:ForEach x:TypeArguments="w:myType" Values="[myInputCollection]">

    <p:ActivityAction x:TypeArguments="w:myType">

    <p:ActivityAction.Argument>

    <p:Variable x:TypeArguments="w:myType" Name="item" />

    </p:ActivityAction.Argument>

    <p:WriteLine>[item.myValue]</p:WriteLine>

    </p:ActivityAction>

    </p:ForEach>

    </p:Sequence>

    </p:Activity>

    宿主

    Dictionary<string, object> inputCollection = new Dictionary<string, object>();

     

    List<string> list = new List<string>();

     

    list.Add("wxd");

    list.Add("lzm");

    list.Add("wxwinter");

     

    inputCollection.Add("myInputCollection", list );

     

     

    WorkflowInstance myInstance = new WorkflowInstance(new Sequence1(), inputCollection);

     

    myInstance.Run();

     

    System.Console.Read();

    结果

     

     

     

     

  • 相关阅读:
    SpringBoot介绍
    linux运行jar以及vi
    linux文件命名
    数据库 mysql
    SSM框架-Spring
    SSM框架-mybatis
    SSM框架-SpringMVC
    设计模式-策略模式
    设计模式-单例模式
    Java多线程实现和JUC介绍
  • 原文地址:https://www.cnblogs.com/foundation/p/1493832.html
Copyright © 2011-2022 走看看