2010-07-06 105 views
0

我的自定义活动有一个延迟,需要在不同的时间设置不同的值。第一次设置时,可能是5秒。第二次,可能是10秒,依此类推。如何做到这一点...延迟没有一个ActivityContext lambda,这将允许我得到一个工作流变量。用不同的时间更改DelayActivity的持续时间

回答

0

持续时间是TimeSpan表达式。只需输入一个能够产生正确时间的公式。类似于TimeSpan.FromSeconds(5 * loopCounter)

1

如果您的活动来自NativeActivity,则在CacheMetadata期间将私有变量作为ImplementationVariable添加,并在您通过活动循环时进行设置。喜欢的东西:

public class RetryTest : NativeActivity 
{ 
    private Variable<int> count = new Variable<int>("Count", 1); 
    private Variable<TimeSpan> delayInterval = new Variable<TimeSpan>("DelayInterval", TimeSpan.FromSeconds(5)); 
    private Delay delay = new Delay(); 

    protected override void CacheMetadata(NativeActivityMetadata metadata) 
    { 
     metadata.AddImplementationVariable(count); 
     metadata.AddImplementationVariable(delayInterval); 

     delay.Duration = new InArgument<TimeSpan>(delayInterval); 

     metadata.AddImplementationChild(delay); 
    } 

    protected override void Execute(NativeActivityContext context) 
    { 
     Console.WriteLine("{0} - Execute", DateTime.Now.ToLongTimeString()); 
     count.Set(context, count.Get(context) + 1); 
     context.ScheduleActivity(delay, OnDelayComplete); 
    } 

    private void OnDelayComplete(NativeActivityContext context, ActivityInstance completedInstance) 
    { 
     Console.WriteLine("{0} - DelayComplete", DateTime.Now.ToLongTimeString()); 
     if (count.Get(context) < 3) 
     { 

      delayInterval.Set(context, TimeSpan.FromSeconds(delayInterval.Get(context).Seconds * count.Get(context))); 
      context.ScheduleActivity(delay, OnDelayComplete); 
     } 
     count.Set(context, count.Get(context) + 1); 
    } 
} 

这应该输出

8:49:26 a.m. - Execute 
8:49:31 a.m. - DelayComplete 
8:49:41 a.m. - DelayComplete 
0

那么,使用 “TimeSpan.FromSeconds(5 *循环计数器)” 就像莫里斯说,然后添加从工具箱的ASIGN活动,并设置循环计数器= loopCounter + 5 ...