程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> WF 4.0基礎篇(九) 控制流Activity

WF 4.0基礎篇(九) 控制流Activity

編輯:關於.NET

本節主要介紹Parallel,Pick,PickBranch,ParallelForEach<T> 的使用.

本文例子下載:

http://files.cnblogs.com/foundation/controlActivitySample2.rar

本文例子說明

控制流Activity

Parallel 並行容器

類名 System.Activities.Statements.Parallel 文件 System.Activities.dll 結構說明 繼承 NativeActivity
是一個 sealed類
override 了 [CacheMetadata方法] 與 [Execute方法] 與[Cancel 方法]
[CompletionCondition]屬性的類型為[ Activity<bool> ],可以接受一個結果為[bool]的表達式
[Branches] 屬性 的類型 為[Collection<Activity>],是並行分支集合
[Variables] 屬性 的類型為[Collection<Variable>] 功能說明 [Parallel]中可以定義變量
[Parallel]會並行執行[Branches] 集合內的所有Activity
當[ CompletionCondition 屬 性]為真時,並行容器完成,其他沒的執行完成的分支就不再執行了(包括執行一半的分支)

例:基本使用

1.在流程中添加[WriteLine]打印當前時間

2.添加[Parallel],並添加兩個分支

第一個分支添加[Delay]延時 10秒, 添加[WriteLine]打印當"A"

第二個分支添加[Delay]延時 15秒, 添加[WriteLine]打印當"B"

3.在流程中添加[WriteLine]打印當前時間

預期:兩次的系統時間差為15秒表示為並行, 兩次的系統時間差為25秒表示為串行

流程 宿主 WorkflowInvoker.Invoke(new ParallelWorkflow()); 結果

例:CompletionCondition 說明

1.在流程中添加bool 型變量[myVariable],默認值False

2.添加[Parallel],並添加三個分支

第一個分支: 添加[WriteLine]打印當"A1" ;添加[Delay]延時 10秒;添加[WriteLine]打印當"A2"

第二個分支: 添加[WriteLine]打印當"B1" ;添加[Delay]延時 15秒;添加[WriteLine]打印當"B2" ; 添加 [Assign]為變量[myVariable]賦值True

第三個分支: 添加[WriteLine]打印當"C1" ;添加[Delay]延時 20秒;添加[WriteLine]打印當"C2"

預期: [Assign]為變量[myVariable]賦值True後,容器結束,因此會依次看到[A1,B1,C1,A2,B2],但看不到[C2]

流程 宿主 WorkflowInvoker.Invoke(new ParallelCompletionConditionWorkflow()); 結果

Pick,PickBranch 觸發容器

Pick

類名 System.Activities.Statements.Pick 文件 System.Activities.dll 結構說明 繼承 NativeActivity
是一個 sealed類
override 了 [CacheMetadata方法] 與 [Execute方法] 與[Cancel 方法]
override 了 [CanInduceIdle]屬性
[Branches ] 屬性 的類型為[ Collection<PickBranch> ]

PickBranch

類名 System.Activities.Statements. PickBranch 文件 System.Activities.dll 結構說明 繼承 Object
是一個 sealed類
[Action]屬性 的類型為[Activity]
[DisplayName] 屬性 的類型為[string]
[Trigger] 屬性 的類型為[Activity]
[Variables] 屬性 的類型為[Collection<Variable>]

功能說明

1. [Pick]觸發容器,提供了基於事件的控制流。 [Branches]集合是觸發容器的分支集合,只能添加[PickBranch]

2. [Pick]觸發容器中可以定義變量

3. [PickBranch] 只可添加到[Pick]中,[PickBranch.Trigger]只能放入觸發類Activity,[PickBranch.Action] 當 [PickBranch.Trigger] 被觸發時,所要執行的Activity

4.只要有一個[PickBranch]的[Trigger]被觸發,其他[PickBranch]就不會被觸發了

5.即使在被執行的[PickBranch]還沒完成時,其他[PickBranch]也不會被觸發

例:基本使用

1.在工作流中添加[WriteLine],打印系統時間

2.在工作流中添加[Pick],添加三個[PickBranch]

第一個分支: [Trigger]添加[Delay]延時 15秒

[Action]添加[WriteLine]打印當"A"

第二個分支: [Trigger]添加[Delay]延時 10秒

[Action]添加[WriteLine]打印當"B1"

添加[Delay]延時 15秒

添加[WriteLine]打印當"B2"

第三個分支: [Trigger]添加[Delay]延時 20秒

[Action]添加[WriteLine]打印當"C"

預期:只有第二個分支會被執行

流程 宿主 WorkflowInvoker.Invoke(new PickWorkflow()); 結果

ParallelForEach<T> 循環

類名 System.Activities.Statements.ParallelForEach<T> 文件 System.Activities.dll 結構說明 繼承 NativeActivity
是一個 sealed類
override 了 [CacheMetadata方法] 與 [Execute方法]
[CompletionCondition]屬性的類型為[ Activity<bool> ],可以接受一個結果為[bool]的表達式
[Body] 屬性 的類型為 [ActivityAction<T>]
[Values] 屬性 的類型為[ InArgument<IEnumerable<T>> ] 功能說明 [Values] 屬性為要循環的集合
[TypeArgument] 為要循環集合的的類型
[item]為循環時的臨時變量,可在[Body]中被訪 問

每個迭代完成後,檢查[ CompletionCondition 屬性],為真時,完成

例:基本使用

1. 創建一code activity 名為[CollectionActivity],

具有[Out]參數,類型為List<string>的參數[myOutCollection]

2. 在流程中添加List<string>變量[myCollection]

3. 在流程中添加[CollectionActivity],將[CollectionActivity.myOutCollection]參數綁定到 [myCollection] 變量

4. 在流程中添加[ForEach<T>],[TypeArgument]屬性指定[string]

[Values] 屬性綁定到 [myCollection] 變量

在[Body]中添加[writeLine],打印[item]

CollectionActivity

public sealed class CollectionActivity : CodeActivity
{
public OutArgument<System.Collections.Generic.List<string>> myOutCollection { get; set; }
protected override void Execute(CodeActivityContext context)
{
System.Collections.Generic.List<string> list = new List<string>();
list.Add("wxd");
list.Add("lzm");
list.Add("wxwinter");
context.SetValue (this.myOutCollection,list );
}
}

流程

宿主

WorkflowInvoker.Invoke(new ParallelForEachWorkflow());

結果

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved