在 While 活动中模拟中断

本主题适用于 Windows Workflow Foundation 4。

此示例演示如何中断下列活动的循环机制:DoWhileForEachWhileParallelForEach

这样做很有用,因为 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)
            } 
        }
    }
}

使用此示例

  1. 使用 Visual Studio 2010 打开 EmulatingBreakInWhile.sln 解决方案文件。

  2. 若要生成解决方案,请按 F6。

  3. 若要运行解决方案,请按 Ctrl+F5。

Dd807393.Important(zh-cn,VS.100).gif 注意:
您的计算机上可能已安装这些示例。在继续操作之前,请先检查以下(默认)目录:

<安装驱动器>:\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