和我一起學Windows Workflow Foundation(2)—–讓WF通過參數接收資料

來源:互聯網
上載者:User

在這一節,我們一起學習通過其他程式調用工作流程,並且在工作流程啟動時給工作流程傳遞一些資料,使其在工作流程中使用。

在workflow開始執行時,我們有兩種方式給工作流程傳遞資料------參數和事件。今天,我們先說說怎樣通過參數來給工作流程傳遞資料。

需要傳遞給workflow的參數,我們需要先在工作流程中通過屬性來進行設定,而後在其他程式調用這個工作流程建立一個工作流程的執行個體時,通過 Dictionary<string, object>索引值集合進行傳遞,如下:

繼續使用我們上一節用到的代碼,給Workflow1 類添加兩個屬性FirstName和LastName

 

        private string firstName ;

        public string FirstName
        {
            get
            {
                return firstName;
            }
            set
            {
                firstName = value;
            }
        }

        private string lastName;

        public string LastName
        {
            get
            {
                return lastName;
            }
            set
            {
                lastName = value;
            }
        }

 

這裡我們將通過其他應用程式傳遞fristName和lastName並讓這兩個值在工作流程執行過程中以對話方塊的形式顯示出來。

因為我們上一節中建立的是個控制台應用程式,所以讓起彈出對話方塊需要應用System.Windows.Forms程式集。

然後修改我們的Workflow1類中的codeActivity1_CodeHandler

 

        private void codeActivity1_CodeHandler(object sender, EventArgs e)
        {
            System.Windows.Forms.MessageBox.Show(
                    "Hello world: " + firstName + " " + lastName);
        }

現在我們已經修改好我們要做的工作流程代碼了。

 

下面我們要建立一個winForm應用程式。

添加一個新的項目WinFormTestHost

接下來我們要確認我們新建立的項目WinFormTestHost能夠調用工作流程Workflow1。

給WinFormTestHost添加引用,引用項目HelloWorldWorkflow.

同時,我們還要讓我們的這個winfrom應用程式引用wwf程式集。繼續添加引用,選擇.net選項卡,添加如下三項:

System.Workflow.Activities

System.Workflow.ComponentModel

System.Workflow.Runtime

 

修改我們的Form1表單。

添加兩個Label分別為Label1和Label2,Text屬性分別為First name和 LastName。

添加兩個TextBox分別為txtFirstName和txtLastName。

添加一個按鈕btnStartWorkflow,用來啟動我們的工作流程,Name屬性為btnStartWorkflow,Text屬性為Start Workflow。

這個簡單的表單就做完了,我們來添加代碼。

首先在我們的類Form1.cs中添加工作流程運行時聲明:

       private WorkflowRuntime wr;

 

雙擊btnStartWorkflow添加事件處理常式。

 

        private void btnStartWorkflow_Click(object sender, EventArgs e)
        {
            if (wr == null)
            {
                wr = new WorkflowRuntime();
                wr.StartRuntime();
            }

            //定義鍵和值的集合(Dictionary)用來傳遞參數
            Dictionary<string, object> parameters = new Dictionary<string, object>();
            parameters.Add("FirstName", txtFirstName.Text);
            parameters.Add("LastName", txtLastName.Text);

            //建立一個工作流程執行個體
            WorkflowInstance instance = wr.CreateWorkflow(typeof(HelloWorldWorkflow.Workflow1), parameters);
            //啟動工作流程
            instance.Start();
            
        }

最後給FormClosed事件添加一段代碼,使其在關閉表單時關閉工作流程

 

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (wr != null)
            {
                if (wr.IsStarted)
                {
                    wr.StopRuntime();
                }
            }
        }

 

現在,我們的程式就開發完成了,點擊F5,將開啟表單:

我們輸入名稱後點Start Workflow,將彈出表單:

這個表單是在Workflow1中執行的,同時,我們也看到,在winfrom表單中輸入的值成功的傳遞到了工作流程中。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.