2010-07-06 103 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 ...