WF4.0 基礎篇 (三) 流程執行個體WorkflowApplication與設計WF程式的基本原則

來源:互聯網
上載者:User

 

通過本節,可以初步瞭解WF程式的特性,為以後的WF類應用開發提供一個初步的感性認識

 

目錄

1    流程執行個體WorkflowApplication與設計WF程式的基本原則    1

1.1    流程執行個體WorkflowApplication    1

1.2    設計WF程式的基本原則    3

1.2.1    第一步: 用WPF建立一個用於運行流程的宿主    4

1.2.2    第二步:建立一個Xaml的工作流程    5

1.2.3    第三步:運行流程    6

1.3 WF4.0與WF3.X 的運行環境對比說明(如果對WF3.X不熟悉可以忽略本節)    7

 

 

本文的兩個例子

 

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

 

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

流程執行個體WorkflowApplication與設計WF程式的基本原則
流程執行個體WorkflowApplication

我在[開始使用WF4.0.]中建立一個"hello wxwinter"螢幕的輸出的工作流程的例子

 

在這個例子中我們使用如下方式啟動了該流程


class
Program

{


static
void Main(string[] args)

{


WorkflowInvoker.Invoke(new
Workflow1());

}

}

 

在實際應用中,我並不使用WorkflowInvoker.Invoke方式建立工作流程(WorkflowInvoker的功能我會在以後的文章中詳細介紹),我會用WorkflowApplication建立工作流程執行個體,
WorkflowApplication用於跟蹤和管理單個工作流程執行個體,先看一下WorkflowApplication的結構:

 

類名

System.Activities.WorkflowApplication

檔案

System.Activities.dll

結構說明

繼承 WorkflowInstance

是一個 sealed類

功能說明

通過從建構函式傳入Activity對象,建立一個工作流程的執行個體

 


 

WorkflowApplication提供了很多管理執行個體的屬性與方法,今天先介紹一下Completed屬性

Action<WorkflowApplicationCompletedEventArgs> Completed { get; set; }

當工作流程完成時,會調用該屬性所指定的System.Action<T>委託

 

委託參數WorkflowApplicationCompletedEventArgs:

ActivityInstanceState CompletionState

IDictionary<string, object> Outputs

Exception TerminationException

Guid InstanceId

IEnumerable<T> GetInstanceExtensions<T>() where T :

 

下面的代碼使用WorkflowApplication方式運行流程

class Program

{

static void Main(string[] args)

{

// WorkflowInvoker.Invoke(new Workflow1());

 

//建立執行個體

WorkflowApplication instance = new WorkflowApplication(new Workflow1());

 

//當執行個體運行完成時調用的方法

instance.Completed = new Action<WorkflowApplicationCompletedEventArgs>(workflowCompleted);

 

//列印執行個體ID

System.Console.WriteLine(instance.Id);

 

//啟動執行個體

instance.Run();

 

System.Console.Read();

}

 

static void workflowCompleted(WorkflowApplicationCompletedEventArgs e)

{

System.Console.WriteLine("狀態:{0}",e.CompletionState.ToString());

System.Console.WriteLine("執行個體編號:{0}", e.InstanceId);

}

}

 

設計WF程式的基本原則

很多時候,初學者學習WF時都使用[Workflow Console Application]這個項目模板

 

以至於學習了很久,許多Activity也使用的很熟練了,但就是無法理解WF究竟該怎樣應用到實際項目中.

 

其實[Workflow Console Application]這個項目模板僅僅是用於初學者練習的,WF有兩種建立流程的方式:

1.用類建立流程,[Workflow Console Application]這個項目模板就是這種方式

2. 用XML格式字串建立流程

由於WF設計的目的就是靈活,所以用XML格式字串建立流程的方式才能體現這一點,下面我就用一個例子來示範一下用XML格式字串建立流程的方式,

 

 

 

 

 

 

 

第一步: 用WPF建立一個用於運行流程的宿主

 

建立一個[WFHost]的WFP項目,將解決方案命名為[LoadXamlSample]

 

添加[System.Activities]類的引用

 

添加一個名為[run]的文字框(AcceptsReturn="True"),添加一個名為[runButton]的按鈕, 為[runButton]添加[Click]事件


private
void runButton_Click(object sender, RoutedEventArgs e)

{

System.Text.UTF8Encoding utf8 = new System.Text.UTF8Encoding();

 


byte[] bs = utf8.GetBytes(this.xamlTextBox.Text);

 

System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(bs);

 


Activity activity = ActivityXamlServices.Load(memoryStream);

 


WorkflowApplication myInstance = new
WorkflowApplication(activity);

 

myInstance.Run();

}

 

為了能看到控制台輸出,要將項目的輸出類型設為[Console Application]

 

第二步:建立一個Xaml的工作流程

用文字檔建立Xaml工作流程是痛苦的工作,在沒為大家講解開發流程設計器之前,我們先用VS2010建立一個流程

建立一個名為[wxwinterWorkflow]的[Activity Library]項目

 

設計一個如下流程

 

得到流程的xaml字串

 

第三步:運行流程

運行[WFHost]程式,將上步得到的xaml字串粘貼到文字框中,點擊[run]按鈕,會在控制台看到"hello wxwinter"的輸出

 

將文字框中的<WriteLine Text="hello wxwiter" />改為<WriteLine Text="hello wxd" />,點擊[run]按鈕,會在控制台看到"hello wxd"的輸出

 

WF4.0與WF3.X 的運行環境對比說明(如果對WF3.X不熟悉可以忽略本節)

WF3.X與WF4運行環境最明顯的變化是,在WF3.X中要建立執行個體要使用WorkflowRuntime的CreateWorkflow方法.

而在WF4中,不需要顯示建立一個[WorkflowRuntime],而是直接使用[WorkflowInstance (bate1中)] 建立,這也是到了bate2中將[WorkflowInstance ]改名為[WorkflowApplication]的原因


class
Program

{


static
void Main(string[] args)

{


WorkflowRuntime workflowRuntime = new
WorkflowRuntime();


WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(wxwinterActivity));

instance.Start();

System.Console.Read();

}

}


public
class
wxwinterActivity : System.Workflow.ComponentModel.Activity

{


protected
override System.Workflow.ComponentModel.ActivityExecutionStatus Execute(System.Workflow.ComponentModel.ActivityExecutionContext executionContext)

{

System.Console.WriteLine("wxd");


return
base.Execute(executionContext);

}

}

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.