工作流编程循序渐进(3:While活动)
生活随笔
收集整理的這篇文章主要介紹了
工作流编程循序渐进(3:While活动)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
工作流編程循序漸進(3:While活動)
作者? 朱先忠
一、引言
本文中,我們來學習另一個簡單活動--While活動。While活動將會持續循環的執行,直至指定判斷為假。
下面,我們來構建一個簡單的示例。本示例的目的是,想主要使用While活動實現顯示一個九九乘法表。二、創建控制臺順序工作流示例程序框架
請遵循如下步驟創建一個控制臺順序工作流示例程序:
1. 啟動VS2008,單擊菜單”文件“|”新建“|”項目“,創建一個名字為WhileActivity的控制臺順序工作流示例程序。
2.之后,系統自動打開工作流設計器界面。
3. 從工具箱中拖動While活動到圖中右側的漢字提示處,得到如圖所示的情形。
4. 因為是在控制臺中顯示一個九九乘法表,所以,一定要使用一個二重循環來實現這一目的。也就是說,我們要使用一個嵌套的While活動。另一方面,我們知 道:外層循環與內層循環變量是存在聯系的,即在每一次內循環執行完成后,要重新進行某種初始化操作。因此,直接在一個While活動中嵌入一個While 活動是無法實現既定功能的。
| 另外需要注意的是,While活動僅允許包括一個子活動。 |
但是,還是有解決辦法的,我們可以在While活動中嵌入一個復合活動,即一個允許其中繼續包含(可能有多個)子活動的活動,例如并行執行活動(Parallel),串行執行活動(Sequence),等等。
5.? 為此,我們最終得到如下的工作流圖:
對于打印一個乘法九九表來說,通常我們可以使用如下一個函數實現:
| static void MultiplyTable() { ??? int i = 1; ??? int j = 1; ??? for (i = 1; i <= 9; i++) ??? { ??????? for (j = 1; j <= i; j++) ??????? { ??????????? if (i == j) ??????????? { ??????????????? Console.Write("{0} * {1}={2} ", i, j, i * j); ??????????????? Console.WriteLine(""); ??????????? } ??????????? else ??????????????? Console.Write("{0} * {1}={2} ", i, j, i * j); ??????? } ??? } } |
于是,我們會得到如下圖所示的打印效果:
下面,我們也想通過工作流操作實現上圖打印效果。現在來討論活動有關屬性設置及編碼問題。
三、活動有關屬性設置及編碼
1. 在本例中,我們要使用規則條件表達內外層循環的規則條件。為此,先要定義兩個循環變量(以工作流Workflow1)的私有字段的形式存在,如下:| ??????? //創建兩個控制內外層循環的變量 ??????? private int i = 0; ??????? private int j = 1; |
然后,你可以單擊“新建”鏈接創建規則表達式(以后也可以使用“編輯”鏈接再修改之)。表達式創建窗口如下所示:
[注意]上面的表達式后面不允許有分號“;”,否則會出現錯誤提示。
3.同樣方式創建內循環活動whileActivity2的規則條件為:
| this.j <= this.i |
4. 根據前面的算法分析,我們要分別創建內外循環活動的
| ??????? private void codeActivity1_ExecuteCode(object sender, EventArgs e) ??????? { ??????????? j = 1; ??????????? i++; ??????? } ??????? private void codeActivity2_ExecuteCode(object sender, EventArgs e) ??????? { ??????????? if (i == j) ??????????? { ??????????????? Console.Write("{0} * {1}={2} ", i, j, i * j); ??????????????? Console.WriteLine(""); ??????????? } ??????????? else ??????????????? Console.Write("{0} * {1}={2} ", i, j, i * j); ??????????? j++; ??????? } |
5. 下面是完整的工作流類定義代碼:
| using System; using System.ComponentModel; using System.ComponentModel.Design; using System.Collections; using System.Drawing; using System.Linq; using System.Workflow.ComponentModel.Compiler; using System.Workflow.ComponentModel.Serialization; using System.Workflow.ComponentModel; using System.Workflow.ComponentModel.Design; using System.Workflow.Runtime; using System.Workflow.Activities; using System.Workflow.Activities.Rules; namespace WhileActiviity { ??? public sealed partial class Workflow1 : SequentialWorkflowActivity ??? { ??????? //創建兩個控制內外層循環的變量 ??????? private int i = 0; ??????? private int j = 1; ??????? public Workflow1() ??????? { ??????????? InitializeComponent(); ??????? } ??????? private void codeActivity1_ExecuteCode(object sender, EventArgs e) ??????? { ??????????? j = 1; ??????????? i++; ??????? } ??????? private void codeActivity2_ExecuteCode(object sender, EventArgs e) ??????? { ??????????? if (i == j) ??????????? { ??????????????? Console.Write("{0} * {1}={2} ", i, j, i * j); ??????????????? Console.WriteLine(""); ??????????? } ??????????? else ??????????????? Console.Write("{0} * {1}={2} ", i, j, i * j); ??????????? j++; ??????? } ??????? private void codeActivity3_ExecuteCode(object sender, EventArgs e) ??????? { ??????????? Console.Read(); ??????? } ??? } } |
自不必贅述了吧。
四、運行實例
按F5運行控制臺程序,一般順利的話,將得到如下圖所示運行時快照。轉載于:https://blog.51cto.com/zhuxianzhong/203304
總結
以上是生活随笔為你收集整理的工作流编程循序渐进(3:While活动)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: http://www.linux.gov
- 下一篇: 域 和 Session 的问题