程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 工作流編程循序漸進(1:代碼活動與時間延遲活動)

工作流編程循序漸進(1:代碼活動與時間延遲活動)

編輯:關於C#

創建控制台順序工作流示例程序框架

請遵循如下步驟創建一個控制台順序工作流示例程序:

1.啟動VS2008,單擊菜單”文件“|”新建“|”項目“,創建一個名字為CodeAndDelay的控制台順序工作流示例程序,見下圖。

2.之後,系統自動打開工作流設計器界面,如圖所示。

3.從工具箱中依次拖動Code,Delay,Code三個活動到圖中右側的漢字提示處,得到如圖所示的情形。

此時,圖中的三個活動相關參數都沒有經過設置,下面將設置有關參數。

為活動創建事件或屬性

4.對於Code活動來說,它相當於普通程序流程圖中的一段代碼模塊。因此,我們可以進入到此活動的ExecuteCode事件中輸入相應代碼即可。為此,只要雙擊圖中的圖標”codeActivity1“,系統控制轉到文件Workflow1.cs中此活動的ExecuteCode事件代碼處:

namespace CodeAndDelay
{
    public sealed partial class Workflow1 : SequentialWorkflowActivity
    {
        public Workflow1()
        {
            InitializeComponent();
        }
        private void codeActivity1_ExecuteCode(object sender, EventArgs e)
        {
            //......等待輸入你的定制代碼
        }
    }
}

創建如下簡單代碼:

private void codeActivity1_ExecuteCode(object sender, EventArgs e)
{
 Console.WriteLine("\n這裡是活動一的執行代碼,當前時間為{0}。",DateTime.Now );
}

5.對於活動codeActivity2,也按上述過程操作,並創建類似於下面的代碼:

private void codeActivity2_ExecuteCode(object sender, EventArgs e)
{
 Console.WriteLine("\n這裡是活動二的執行代碼,當前時間為{0}。", DateTime.Now);
}

6.切換到工作流設計器界面,然後單擊選擇延遲活動圖標。在屬性窗口中設置屬性TimeoutDuration的值為00:00:05(”時:分:秒“格式)。因為延遲活動僅僅實現一段時間延遲功能,所以,這個活動是非常容易理解的。

至此,完成了整個工作流部分的設計工作。非常直觀簡單!最後,別忘記把上面文件保存一下。

最後,我們來看一下控制台主程序是如何創建工作流實例,並啟動工作流執行的。切換到控制台主程序Program.cs。此時,系統已經為我們自動生成了如下代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Workflow.Runtime;
using System.Workflow.Runtime.Hosting;
namespace CodeAndDelay
{
    class Program
    {
        static void Main(string[] args)
        {
            //......經常在此添加一些初始化代碼
            //創建工作流實例,並啟動工作流執行。注意:工作流是以異步的獨立的工作線程方式執行的
            using(WorkflowRuntime workflowRuntime = new WorkflowRuntime())
            {
                AutoResetEvent waitHandle = new AutoResetEvent(false);
                workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e) {waitHandle.Set();};
                workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e)
                {
                    Console.WriteLine(e.Exception.Message);
                    waitHandle.Set();
                };
                WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(CodeAndDelay.Workflow1));
                instance.Start();
                waitHandle.WaitOne();
            }
            //......在此經常執行一些工作流執行後的善後工作
        }
    }
}

注意:有關上面代碼中AutoResetEvent事件等的詳細討論將在後續文章中介紹。

觀察運行結果

按F5運行控制台程序,一般順利的話,將得到如下圖所示運行時快照。

完全合乎意料的結果,一切盡在不言中!

備注(FROM MSDN)

DelayActivity活動有一個InitializeTimeoutDuration 事件,它發生在在超時持續時間開始之前發生。對於此事件,微軟的建議是:不應使用此事件來設置 DelayActivity 的 TimeoutDuration。而應在工作流的InitializeComponent方法中設置超時持續時間。

出處: http://zhuxianzhong.blog.51cto.com/157061/203300

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