惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
Jina AI
Jina AI
Hugging Face - Blog
Hugging Face - Blog
A
About on SuperTechFans
Y
Y Combinator Blog
D
DataBreaches.Net
I
InfoQ
Recent Announcements
Recent Announcements
Last Week in AI
Last Week in AI
G
Google Developers Blog
博客园_首页
博客园 - 司徒正美
V
V2EX
Stack Overflow Blog
Stack Overflow Blog
博客园 - 叶小钗
Engineering at Meta
Engineering at Meta
Apple Machine Learning Research
Apple Machine Learning Research
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
B
Blog
MongoDB | Blog
MongoDB | Blog
博客园 - 【当耐特】
D
Docker
量子位

博客园 - 星宿.NET

MOSS SSO -2147217900调用 SPS Single Sign-on 失败。返回的错误代码为“-2147217900”。 错误 数据关系图出现“此数据库没有有效所有者”错误的解决方法 - 星宿.NET - 博客园 SQL 语句建立连接服务器 SQL语句进行left join的时候发生Cannot resolve collation conflict for equal to operation.错误 列出域中所有用户的代码 跟我一起学Windows Workflow Foundation(7)-----给定制活动添加有效性验证 跟我一起学Windows Workflow Foundation(6)-----制作一个基本的定制活动 treeview控制checkbox修改版(2) treeview控制checkbox修改版(1) [转载]Asp.Net2.0权限树中Checkbox的操作 通过WPF/E制作一个从数据库读取数据的图谱 [转载]如何使用 Visual C# 2005 或 Visual C# .NET 向 Excel 工作簿传输数据 跟我一起学Windows Workflow Foundation(5)-----使用activity设计器创建一个整合的定制activity 跟我一起学Windows Workflow Foundation(4)-----使用Listen,Delay,和其他envnt-based定制活动 跟我一起学Windows Workflow Foundation(3)-----使用If/Else活动,定制活动处理工作流,使用事件传递数据 和我一起学Windows Workflow Foundation(1)-----创建和调试一个WF实例 将visual studio 2005 SP1补丁整合到安装文件 初学使用sharepoint 2007 用户控件包装器 QuickPart 创建或修改WSS的主题
和我一起学Windows Workflow Foundation(2)-----让WF通过参数...
星宿.NET · 2007-01-20 · via 博客园 - 星宿.NET

在这一节,我们一起学习通过其他程序调用工作流,并且在工作流启动时给工作流传递一些数据,使其在工作流中使用。

在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<stringobject> parameters = new Dictionary<stringobject>();
            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窗体中输入的值成功的传递到了工作流中。