為活動創建事件或屬性
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事件等的詳細討論將在後續文章中介紹