0

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

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

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

只有我在声明时不使用 var 的默认值。看来 var 似乎与我在设计视图中定义的 var 没有任何关系。我也尝试过仅在代码中定义它,但是我无法在例如常规的分配活动中访问它。

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

谢谢。

4

1 回答 1

2

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

自定义增量活动的示例(这也是分配活动的工作方式):

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>来构建打印字符串。除此之外,一模一样!

于 2012-09-25T23:44:36.250 回答