首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WF 4.0 基礎篇(三):WorkflowApplication 與 WF 程式設計基本原則

     編輯:關於.NET

前言

實務開發中應使用 WorkflowApplication 管理工作流實例,而非 WorkflowInvoker。本文說明實例管理、XAML 動態載入,以及正確的 WF 架構設計原則。

WorkflowApplication 實例管理

  • 繼承 WorkflowInstance,密封類別
  • 建構函式傳入 Activity 建立實例
  • 提供 Completed、Aborted、OnUnhandledException、Run()、Id 等關鍵成員

類別結構

Completed 事件

Action<WorkflowApplicationCompletedEventArgs> Completed { get; set; }

WorkflowApplicationCompletedEventArgs 提供:

  • CompletionState:ActivityInstanceState (Closed/Faulted/Canceled)
  • Outputs:Out/InOut 參數值
  • TerminationException:終止例外
  • InstanceId:實例識別碼

完整範例

static void Main(string[] args)
{
    var instance = new WorkflowApplication(new Workflow1());
    instance.Completed = e => 
    {
        Console.WriteLine("狀態:{0}", e.CompletionState);
        Console.WriteLine("實例編號:{0}", e.InstanceId);
    };
    Console.WriteLine(instance.Id);
    instance.Run();
    Console.Read();
}

執行結果

WF 程式設計基本原則:XAML 動態載入

錯誤觀念:以為 Workflow Console Application(類別式流程)是唯一開發方式。

正確架構:

  1. 宿主專案(WPF/WinForm/Console):負責載入 XAML、建立實例、管理生命週期
  2. 流程專案(Activity Library):設計 XAML 流程,編譯為 .xaml 檔案
  3. 運行時透過 ActivityXamlServices.Load 動態載入

實作步驟

1. 建立 WPF 宿主專案

  • 專案名 WFHost,方案名 LoadXamlSample
  • 參考 System.Activities
  • UI:TextBox (xamlTextBox, AcceptsReturn=True) + Button (runButton)
  • 輸出類型設為 Console Application 以觀看輸出

專案模板 建立專案 加入參考 輸出類型

2. 載入 XAML 執行

private void runButton_Click(object sender, RoutedEventArgs e)
{
    var utf8 = new UTF8Encoding();
    var bs = utf8.GetBytes(this.xamlTextBox.Text);
    var ms = new MemoryStream(bs);
    var activity = ActivityXamlServices.Load(ms);
    var instance = new WorkflowApplication(activity);
    instance.Run();
}

程式碼

3. 建立 Activity Library 流程專案

  • 專案名 wxwinterWorkflow
  • 設計流程:Sequence → WriteLine("hello wxwinter")

Activity Library 設計流程

4. 取得 XAML 字串

在設計器選擇「檢視 XAML」複製內容。

XAML內容

5. 執行與動態修改

  • 貼上 XAML 點擊 Run → 輸出 "hello wxwinter"
  • 修改 XAML 中 Text="hello wxd" → 輸出 "hello wxd"
  • 無需重新編譯宿主,體現 WF 動態彈性

執行結果1 執行結果2

WF 3.x vs 4.0 執行環境比較

// WF 3.x
var runtime = new WorkflowRuntime();
var instance = runtime.CreateWorkflow(typeof(wxwinterActivity));
instance.Start();

// WF 4.0
var instance = new WorkflowApplication(new Workflow1()); // 或載入 XAML
instance.Run();

WF 4.0 移除 WorkflowRuntime,直接用 WorkflowApplication(Beta2 前稱 WorkflowInstance)。

WF3程式碼

原始碼下載

LoadXamlSample.rar | WorkflowApplicationSample.rar

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved