在 While 活动中模拟中断
本主题适用于 Windows Workflow Foundation 4。
此示例演示如何中断下列活动的循环机制:DoWhile、ForEach、While 和 ParallelForEach。
这样做很有用,因为 Windows Workflow Foundation (WF) 并不包括任何可中断这些循环的执行的活动。
方案
此示例从供应商列表(Vendor
类的实例)中查找第一个可靠的供应商。每个供应商都具有一个 ID
、一个 Name
和一个用于确定供应商的可靠程度的可靠性值。此示例创建一个名为 FindReliableVendor
的自定义活动,该活动接收两个输入参数(一个供应商列表和一个最小可靠值),然后返回列表中符合提供的条件的第一个供应商。
中断循环
Windows Workflow Foundation (WF) 不包括用于中断循环的活动。此代码示例通过使用一个 If 活动和若干变量,可实现循环中断。在此示例中,当为 reliableVendor
变量分配一个值而不是 null 时,则会中断 While 活动。
以下代码示例演示了此示例如何中断一个 while 循环。
// Iterates while the “i” variable is lower than the size of the list
// and any reliable Vendor is found.
new While(env => i.Get(env) < this.Vendors.Get(env).Count && reliableVendor.Get(env) == null)
{
DisplayName = "Main loop. Breaks when a reliable vendor is found",
Body = new Sequence
{
Activities =
{
// This is the if used for setting the value of the break value…
new If
{
DisplayName = "Check for a reliable vendor",
// If a vendor satisfies the reliability level…
Condition = new InArgument<bool>(env =>
this.Vendors.Get(env)[i.Get(env)].Reliability >
this.MinimumReliability.Get(env)),
// then assign that vendor to the reliable vendor variable and
// the while condition becomes false (exit the loop).
Then = new Assign<Vendor>
{
To = reliableVendor,
Value = new InArgument<Vendor>(env =>
this.Vendors.Get(env)[i.Get(env)])
}
},
// Increment the iteration variable.
new Assign<int>
{
DisplayName = "Increment iteration variable",
To = i,
Value = new InArgument<int>(env => i.Get(env) + 1)
}
}
}
}
使用此示例
使用 Visual Studio 2010 打开 EmulatingBreakInWhile.sln 解决方案文件。
若要生成解决方案,请按 F6。
若要运行解决方案,请按 Ctrl+F5。
注意: |
---|
您的计算机上可能已安装这些示例。在继续操作之前,请先检查以下(默认)目录:
<安装驱动器>:\WF_WCF_Samples
如果此目录不存在,请访问针对 .NET Framework 4 的 Windows Communication Foundation (WCF) 和 Windows Workflow Foundation (WF) 示例(可能为英文网页),下载所有 Windows Communication Foundation (WCF) 和 WF 示例。此示例位于以下目录:
<安装驱动器>:\WF_WCF_Samples\WF\Basic\Built-InActivities\EmulatingBreakInWhile
|