在WF4中的自定义活动中访问变量<int> </int>

时间:2012-09-25 22:20:34

标签: workflow-foundation-4 workflow-foundation

我需要计算我在流程图流程中迭代的次数,但我需要能够读取并优选地在自定义活动中写入变量。

我当前的尝试是使用整个流程图的范围声明设计视图中的var,默认值为0并使用Assign活动递增。但我无法弄清楚如何在不重置的情况下访问自定义活动中的变量。

我尝试访问var的内容类似于答案中描述的内容:Declare Variable<T> variable in a CodeActivity in windows workflow 4.0

只有在声明时我才会使用var的默认值。似乎var与设计视图中定义的var没有任何关联。我也尝试在代码中定义它,但后来我无法访问它,例如常规的Assign活动。

那么我能做些什么才能将var用作“全局”变量?

感谢。

1 个答案:

答案 0 :(得分:2)

最直观,也许正确的方法是将您在流程图级别声明的变量传递到自定义活动中。然后你就可以用它的价值做任何你想做的事情并将它归还。

自定义增量活动的示例(这也是Assign活动的工作原理):

public class IncrementActivity : CodeActivity<int>
{
    [RequiredArgument]
    public InArgument<int> CountVariable { get; set; }

    protected override int Execute(CodeActivityContext context)
    {
        // Do whatever logic you want here

        return CountVariable.Get(context) + 1;
    }
}

这是使用序列的使用示例(使用流程图时相同):

var countVar = new Variable<int>("count");

var activity = new Sequence
{
    Variables = 
    { 
        // declare counter variable at global scope
        countVar
    },
    Activities =
    {
        new WriteLine { Text = new VisualBasicValue<string>(@"""Count: "" & count") },
        new IncrementActivity { CountVariable = countVar, Result = countVar },
        new WriteLine { Text = new VisualBasicValue<string>(@"""Count: "" & count") },
        new IncrementActivity { CountVariable = countVar, Result = countVar },
        new WriteLine { Text = new VisualBasicValue<string>(@"""Count: "" & count") },
        new IncrementActivity { CountVariable = countVar, Result = countVar }
    }
};

输出:

Count: 0
Count: 1
Count: 2

请注意,通过可视化设计器可以更简单,因为您不必直接使用 VisualBasicValue<string> 来构建打印字符串。除此之外,完全一样!