⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wait.cs

📁 WF本质论一书的源码,要书籍的朋友同我联系.
💻 CS
字号:
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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -