WF4.0 基础篇 (二) Activity介绍及WriteLine Activity的使用
?
從本篇開始,將正式講解WF4.0,本文主要涉及如下內容:Activity介紹, WF4.0 中工作流的結構,通過WriteLine演示InArgument<T>參數的使用
?
目錄
1????Activity介紹及WriteLine Activity的使用????1
1.1????代碼下載????1
1.2????什么是Activity????1
1.3????WF4.0 中工作流的結構????2
1.4????WriteLine Activity????3
1.4.1????Text 屬性????3
1.4.2????TextWriter 屬性????4
1.4.3????在代碼中使用WriteLine????5
?
?
Activity介紹及WriteLine Activity的使用
?
代碼下載
[WF4.0 基礎篇 (一)開始使用WF] 的代碼
http://files.cnblogs.com/foundation/helloWorkflow.rar
?
本文代碼
http://files.cnblogs.com/foundation/WriteLineActivitySample.rar
代碼結構說明
?
什么是Activity
Activity在WF中是一個最基本的概念.當談及Activity時,通常是指如下兩個概念Activty Class 或 在 工作流中任意Activity派生類的統稱
?
?
一.先說一下Activty Class
這個概念比較簡單,就是指 [System.Activities.Activity] 這個NET4.0 類庫中所帶的類
[System.Activities.Activity]是工作流結構的基類,下圖是[System.Activities.Activity]與派生類的結構
?
?
二.再說一下"工作流中任意Activity派生類的統稱"是什么意思
在很多翻譯文章中,當其要表述"工作流中任意Activity派生類的統稱"這個概念時,會將[Activity]翻譯為[活動],其實我更喜歡將其翻譯為[節點]
WF4.0的流程結構與我們常用的流程圖很象,下面我們看一下一個流程圖的例子:
(注:從漢語的角度講,[節點]與[結點]是不同的,[節點]是指上圖中的矩形,[結點]則是指上圖中矩形間的連線)
?
我們再看一下WF4.0流程的例子
?
我們可以將WF4.0流程中的[活動]理解為流程圖的[節點]
(注: WF4.0流程中只有[節點]沒有[結點],從數據結構的角度講上面的兩個例子分別是[圖結構]和兩種描述方式,第一個例子是([節點]+[結點]),第二個例子是([節點]+ [節點關系自描述]) ,這個概念先講到這里,后面我會專門寫一篇從數據結構的角度分析WF4.0流程結構的文章)
?
WF4.0 中工作流的結構
WF4.0工作流從表現形式上看是圖結構,但其實質上仍是樹結構,有[根],有鮮明的[層次關系]這些都是樹的基本特征.
只不過WF4.0工作流采用了[枝葉樹]的方式,并且提供了FlawCahr這個[活動]用以在其內部實現[圖結構]
下面我具體說明一下枝葉樹結構:
枝葉樹是指在樹結構上存在兩類節點,一類是支節點,一類是葉節點.支節點下可以有支節點也可以有葉節點,葉節點下不能再有任何節點.這與磁盤結構很象.支節點像文件夾,葉節點像文件.
WF4.0的活動也是這樣.其中[FlowCahr]與[Sequence]是兩個常用的支節點[活動]
[FlowCahr]用于實現一個圖結構的[活動]
[Sequence]則用于實現從上到下順序執行的[活動]
關于這兩個[活動]在后面的文章中會有詳細介紹,下面我們先學習一個簡單的葉節點[活動], WriteLine
?
?
WriteLine Activity
WriteLine是一個用于輸出字符串的Activity,在[開始使用WF4.0]一文中,我們已經使用它了,在這量我將對WriteLine的功能做具體講解,并引入一個WF4.0中很重要的概念"表達式"
類名 | System.Activities.Statements.WriteLine |
文件 | System.Activities.dll |
結構說明 | 繼承 CodeActivity 是一個 sealed類 定義了[InArgument<string> Text屬性] 與[InArgument<TextWriter> TextWriter屬性] override 了 [CacheMetadata方法] 與 [Execute方法] |
功能說明 | WriteLine類調用[TextWriter 屬性]所指定的[System.IO.TextWriter 對像]輸出[Text 屬性] 的值 如果沒指定[TextWriter 屬性],默認為控制臺輸出[Text 屬性] 的值 |
?
Text 屬性
是一個InArgument<string> 類型參數 ,用于接收結果值為[string]的VB表達式
(關于InArgument<T>與WF4.0中的VB表達式會在后面的文章中詳細介紹)
流程 | |
xaml | <Activity mc:Ignorable="sap" x:Class="WriteLineActivitySample.Workflow1" mva:VisualBasic.Settings="Assembly references and imported namespaces serialized as XML namespaces" xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mv="clr-namespace:Microsoft.VisualBasic;assembly=System" xmlns:mva="clr-namespace:Microsoft.VisualBasic.Activities;assembly=System.Activities" xmlns:s="clr-namespace:System;assembly=mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" xmlns:s1="clr-namespace:System;assembly=mscorlib" xmlns:s2="clr-namespace:System;assembly=System" xmlns:s3="clr-namespace:System;assembly=System.Xml" xmlns:s4="clr-namespace:System;assembly=System.Core" xmlns:sad="clr-namespace:System.Activities.Debugger;assembly=System.Activities" xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation" xmlns:scg="clr-namespace:System.Collections.Generic;assembly=System" xmlns:scg1="clr-namespace:System.Collections.Generic;assembly=System.ServiceModel" xmlns:scg2="clr-namespace:System.Collections.Generic;assembly=System.Core" xmlns:scg3="clr-namespace:System.Collections.Generic;assembly=mscorlib" xmlns:sd="clr-namespace:System.Data;assembly=System.Data" xmlns:sd1="clr-namespace:System.Data;assembly=System.Data.DataSetExtensions" xmlns:sl="clr-namespace:System.Linq;assembly=System.Core" xmlns:st="clr-namespace:System.Text;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > <WriteLine DisplayName="WriteLine的Text屬性演示" sad:XamlDebuggerXmlReader.FileName="d:\users\wxd\documents\visual studio 2010\Projects\WriteLineActivitySample\WriteLineActivitySample\Workflow1.xaml" sap:VirtualizedContainerService.HintSize="213,200" Text="[String.Format("{0}:{1}", "wxwinter", System.DateTime.Now.ToString())]" /> </Activity> |
運行工作流 | class Program { static void Main(string[] args) { //WriteLine的Text屬性演示 WorkflowInvoker.Invoke(new Workflow1()); ? //控制臺停屏看效果 System.Console.Read(); } } |
運行結果 |
?
TextWriter 屬性
是一個InArgument<TextWriter> 類型參數 ,用于接收結果值為[TextWriter]的VB表達式
自定義 TextWriter | public class myTextWriter : System.IO.TextWriter { public override Encoding Encoding { get { return Encoding.UTF8; } } public override void WriteLine(string value) { System.Console.WriteLine("wxwinter:" + value); } } |
流程 | |
xaml | <Activity ...> <WriteLine DisplayName="WriteLine的TextWriter屬性演示" ? Text="wxd" ? TextWriter="[New WriteLineActivitySample.myTextWriter()]" /> </Activity> |
運行工作流 | ? class Program { static void Main(string[] args) { //WriteLine的TextWriter屬性演示 WorkflowInvoker.Invoke(new Workflow2()); ? //控制臺停屏看效果 System.Console.Read(); } } |
運行結果 |
?
在代碼中使用WriteLine
class Program { static void Main(string[] args) { WriteLine wxwinterActivity = new WriteLine(); InArgument<string> inArgument = new InArgument<string>(getValue("wxd")); wxwinterActivity.Text = inArgument; WorkflowInvoker.Invoke(wxwinterActivity); ? System.Console.Read(); } ? static string getValue(string p) { return "wxwinter:" + p; } } |
?
總結
以上是生活随笔為你收集整理的WF4.0 基础篇 (二) Activity介绍及WriteLine Activity的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SSL证书安装指南 - Winodws
- 下一篇: Windows Mobile获取SIM卡