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

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

編輯:關於.NET

本節主要介紹IF, Switch<T>, While, DoWhile, ForEach<T> 的使用.

本文例子下載:

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

本文例子說明

控制流Activity

IF 條件

類名 System.Activities.Statements.If 文件 System.Activities.dll 結構說明 繼承 NativeActivity 是一個 sealed類 override 了 [CacheMetadata方法] 與 [Execute方法] [Condition]屬性的類型為[ System.Activities.InArgument<bool> ],可以接受一個結果為[bool]的表達式 [Then] 屬性 的類型為 [System.Activities.Activity] [Else] 屬性 的類型為[System.Activities.Activity] 功能說明 [Then] 屬性 Activity類型,如果[Condition]的表達式結果為[True],執行[Then]否則執行[Else]

例:

1. 在流程中添加string變量[myVariable]

2. 添加[Assign]為變量[myVariable]賦值"wxd"

3. 添加[If],[Condition]的表達式為[ myVariable = "wxd" ]

4. 在[If]的[Then]中添加[WriteLine]打印[ "Then:" + myVariable ]

在[If]的[Else]中添加[WriteLine]打印[ "Else:" + myVariable ]

流程

宿主

WorkflowInvoker.Invoke(new IfWorkflow());

結果

Switch<T> 分支

類名 System.Activities.Statements.Switch<T> 文件 System.Activities.dll 結構說明 繼承 NativeActivity
是一個 sealed類
override 了 [CacheMetadata方法] 與 [Execute方法]
[Expression]屬性 的類型為[System.Activities.InArgument<T>],是case的 表達式
[Default] 屬性 的類型為[System.Activities.Activity]
[Cases] 屬性 的類型為[IDictionary<T, Activity>] 功能說明 在添加[Switch<T>]時,需要為case 表達式 [Expression屬性] 指定類型

[Switch]會比效[Expression]的值與[Case集 合]中每個分支值,如果有相等的就執行該分支,如果沒的相等的就執行[Default]
[Switch]會自動檢查[Case集合]中是否有相同的分支 條件

例:

1. 在流程中添加string變量[myVariable]

2. 添加[Assign]為變量[myVariable]賦值"wxwinter"

3. 添加[Switch],[Expression]的表達式類型為[string],內容為[ myVariable]

4. 在[Default]中添加[WriteLine]打印["Case Default :" + myVariable ]

添加[case],值為"wxd",在新添加的[case] 中添加[WriteLine]打印["Case wxd :" + myVariable]

添加[case],值為"lzm",在新添加的[case] 中添加[WriteLine]打印["Case lzm :" + myVariable]

流程

宿主

WorkflowInvoker.Invoke(new SwitchWorkflow());

結果

While 循環 類名 System.Activities.Statements.While 文件 System.Activities.dll 結構說明 繼承 NativeActivity
是一個 sealed類
override 了 [CacheMetadata方法] 與 [Execute方法]
[Variables] 屬 性 的類型為[Collection<Variable>]
[Condition]屬性 的類型為[Activity<bool>],可以接受一個結果為[bool]的表達 式
[Body] 屬性 的類型為[System.Activities.Activity] 功能說明 [While]中可以定義變量
當[Condition]條件為真時會執行[Body]中的內容

例:

1. 在流程中添加int變量[myVariable]

2. 添加[While],[Condition]的表達式為[myVariable<=10]

3. 在[While]的[Body]中添加[Assign],為變量[myVariable]賦值為 [myVariable + 1]

添加[WriteLine]打印變量[myVariable]的值

流程

宿主

WorkflowInvoker.Invoke(new WhileWorkflow());

結果

DoWhile 循環 類名 System.Activities.Statements.DoWhile 文件 System.Activities.dll 結構說明 繼承 NativeActivity
是一個 sealed類
override 了 [CacheMetadata方法] 與 [Execute方法]
[Variables] 屬 性 的類型為[Collection<Variable>]
[Condition]屬性 的類型為[Activity<bool>],可以接受一個結果為[bool]的表達 式
[Body] 屬性 的類型為[System.Activities.Activity] 功能說明 [DoWhile]中可以定義變量
當[Condition]條件為真時會執行[Body]中的內容, 當[Condition]條件為假時會執行[Body]中 的內容一次

例:

1. 添加[DoWhile],[Condition]的表達式為[False]

2. 在[DoWhile]的[Body] 添加[WriteLine]打印"wxwinter"

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

ForEach<T> 循環

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

例:

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 ForEachWorkflow());

結果

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