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

推荐订阅源

罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
The Cloudflare Blog
WordPress大学
WordPress大学
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 叶小钗
博客园 - 聂微东
阮一峰的网络日志
阮一峰的网络日志
腾讯CDC
博客园 - 三生石上(FineUI控件)
V
V2EX
有赞技术团队
有赞技术团队
V
Visual Studio Blog
小众软件
小众软件
Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
量子位
T
Tailwind CSS Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
P
Palo Alto Networks Blog
Cisco Talos Blog
Cisco Talos Blog
I
Intezer
Project Zero
Project Zero
A
Arctic Wolf
P
Privacy International News Feed
V
Vulnerabilities – Threatpost
L
Lohrmann on Cybersecurity
S
Securelist
C
Cybersecurity and Infrastructure Security Agency CISA
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Tor Project blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
S
Security @ Cisco Blogs
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Google DeepMind News
Google DeepMind News
N
News and Events Feed by Topic
TaoSecurity Blog
TaoSecurity Blog
L
LINUX DO - 热门话题
G
GRAHAM CLULEY
Help Net Security
Help Net Security
N
News | PayPal Newsroom
W
WeLiveSecurity
G
Google Developers Blog
Microsoft Security Blog
Microsoft Security Blog
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
C
Check Point Blog

博客园 - gotolovo

导出csv 导出excel 正则学习电话匹配 logmanager des 加密 解密 - gotolovo c# 发送邮件 工作流学习过程-事务 工作流学习过程-状态机 蛋疼的viewstate 工作流学习过程-持久化服务 工作流学习过程-使用关联 工作流学习过程-本地服务之事件处理 工作流学习过程-本地服务之调用方法 工作流学习过程-验证活动 工作流学习过程-自定义活动 基本的几个排序算法 关于sql中时间的格式转换 数据行变列 请编程遍历页面上所有TextBox控件并给它赋值为空
工作流学习过程-开篇
gotolovo · 2010-10-22 · via 博客园 - gotolovo

工作流学习过程-开篇

最近由于项目原因,比较闲,闲暇时间学习了下工作流方面的知识。版本为3.5
学习资料为wf高级程序设计
感觉书里内容比较基础、层次很清晰、代码全,非常适合工作流入门学习
先来看看什么是工作流?
流就是处理一件事情的步骤喽,那工作流就是要完成某项工作的步骤集合了(个人理解)
由于本人水平很哇。故不能提供代码的解释部分,紧提供实例及代码

例1.计算器
运行时效果如图所示

根据实际需要若完成该计算器的功能
1-0 10个数字的Click事件应该相应同一个事件btnNum_Click
+-*/四个运算符号Click事件应该响应同一个事件btnOperator_Click
= 和 C 各为一个事件btnEqual_Click和btnClear_Click
实现代码如下。写的比较烂

代码

private int num1, num2;
private string opera;
private double result = 0;private void btnEqual_Click(object sender, EventArgs e)
{
num2
= int.Parse(txt.Text);
switch (opera)
{
case "+":
result
= num1 + num2;
break;
case "-":
result
= num1 - num2;
break;
case "*":
result
= num1 * num2;
break;
case "/":
if (num2 == 0)
throw new ArgumentException("被除数为0");
result
= num1 / num2;
break;
default:
throw new ArgumentException("错误的操作符");
break;
}
txt.Text
= result.ToString();
}
private void btnClear_Click(object sender, EventArgs e)
{
this.txt.Text = string.Empty;
}
private void btnNum_Click(object sender, EventArgs e)
{
Button btn
= sender as Button;
this.txt.AppendText(btn.Text);
}
private void btnOperator_Click(object sender, EventArgs e)
{
num1
= int.Parse(txt.Text);
txt.Text
= string.Empty;
Button btn
= sender as Button;
opera
= btn.Text;
}

一个简单的计算器功能就基本完成了。。当然了这里有很多bug的。。要按最正确的方式使用(:-D)
那我们如何来使用工作流来完成此项工作呢
来看看工作流如图:

后台代码如下:

代码

public sealed partial class CalculatorWorkflowActivity : SequentialWorkflowActivity
{
public CalculatorWorkflowActivity()
{
InitializeComponent();
}
public int Num1 { get; set; }
public int Num2 { get; set; }
public string Operator { get; set; }
public double Result { get; set; }private void Add_ExecuteCode(object sender, EventArgs e)
{
Result
= Num1 + Num2;
}
private void Sub_ExecuteCode(object sender, EventArgs e)
{
Result
= Num1 - Num2;
}
private void Mul_ExecuteCode(object sender, EventArgs e)
{
Result
= Num1 * Num2;
}
private void Div_ExecuteCode(object sender, EventArgs e)
{
if (Num2 == 0)
throw new ArgumentException("除数为0");
Result
= (double)Num1 / (double)Num2;
}
private void Fault_ExecuteCode(object sender, EventArgs e)
{
throw new ArgumentException("无效的操作符");
}
}

那么我们的应用程序又如何来使用它呢
只需将btnEqual_Click 代码修改如下即可

代码

private void btnEqual_Click(object sender, EventArgs e)
{
num2
= int.Parse(txt.Text);
using (WorkflowRuntime workflowRuntime = new WorkflowRuntime())
{
AutoResetEvent waitHandle
= new AutoResetEvent(false);
workflowRuntime.WorkflowCompleted
+= delegate(object sender1, WorkflowCompletedEventArgs e1)
{
waitHandle.Set();
};
workflowRuntime.WorkflowTerminated
+= delegate(object sender1, WorkflowTerminatedEventArgs e1)
{
Console.WriteLine(e1.Exception.Message);
waitHandle.Set();
};

Dictionary

<string, object> parameters = new Dictionary<string, object>();
parameters.Add(
"Num1", num1);
parameters.Add(
"Num2", num2);
parameters.Add(
"Operator", opera);

WorkflowInstance instance

= workflowRuntime.CreateWorkflow(typeof(CalculatorWorkflowActivity), parameters);
instance.Start();
waitHandle.WaitOne();
txt.Text
= result.ToString();
}
}

试运行。。结果呢?运行结果在哪里?

我们知道result现在应该是个空值,即使将值赋予txt控件也无济于事~

原来workflowRuntime的WorkflowCompleted事件提供的参数WorkflowCompletedEventArgs里的属性OutputParameters提供了提取操作结果的功能

只需在事件中将加入如下代码即可

result = (double)(e1.OutputParameters["Result"]);

 再运行即可得到和我们之前windowsForm一样的东西了

posted on 2010-10-22 16:08  gotolovo  阅读(235)  评论()    收藏  举报