wait.cs
来自「WF本质论一书的源码,要书籍的朋友同我联系.」· CS 代码 · 共 59 行
CS
59 行
using System;
using System.Threading;
using System.Workflow.Runtime;
using System.Collections.Generic;
using System.Workflow.ComponentModel;
using EssentialWF.Services;
namespace EssentialWF.Activities {
public class Wait : Activity {
private Guid timerId;
public static readonly DependencyProperty DurationProperty
= DependencyProperty.Register("Duration",
typeof(TimeSpan), typeof(Wait));
public TimeSpan Duration {
get { return (TimeSpan)GetValue(DurationProperty); }
set { SetValue(DurationProperty, value); }
}
protected override ActivityExecutionStatus Execute(ActivityExecutionContext context) {
timerId = Guid.NewGuid();
WorkflowQueuingService qService = context.GetService<WorkflowQueuingService>();
WorkflowQueue queue = qService.CreateWorkflowQueue(timerId, false);
queue.QueueItemAvailable += this.ContinueAt;
TimerService timerService = context.GetService<TimerService>();
timerService.SetTimer(this.Duration,
timerId, base.WorkflowInstanceId);
return ActivityExecutionStatus.Executing;
}
void ContinueAt(object sender, QueueEventArgs e) {
ActivityExecutionContext context = sender as ActivityExecutionContext;
WorkflowQueuingService qService = context.GetService<WorkflowQueuingService>();
WorkflowQueue queue = qService.GetWorkflowQueue(timerId);
qService.DeleteWorkflowQueue(timerId);
context.CloseActivity();
}
protected override ActivityExecutionStatus Cancel(ActivityExecutionContext context) {
WorkflowQueuingService qService = context.GetService<WorkflowQueuingService>();
if (qService.Exists(timerId)) {
TimerService timerService = context.GetService<TimerService>();
timerService.CancelTimer(timerId);
qService.DeleteWorkflowQueue(timerId);
}
return ActivityExecutionStatus.Closed;
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?