VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Objective-C编程 >
  • 通过AEC解读WF的核心原理(10)取消和取消处理器

制作者:剑锋冷月 单位:无忧统计网,www.51stat.net
 

  说明

  例子下载:

  http://files.cnblogs.com/wxwinter/aec10_1.rar

  http://files.cnblogs.com/wxwinter/aec10_2.rar

  取消的实现

  取消处理器CancellationHandlerActivity的使用

  例子:取消 内容控件Activity

通过AEC解读WF的核心原理(十)取消与取消处理器

public class 内容控件: Activity
  {
protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
{
this.Invoke(正常业务, new EventArgs());
return ActivityExecutionStatus.Executing;
}
  
protected override ActivityExecutionStatus Cancel(ActivityExecutionContext executionContext)
{
System.Console.WriteLine("取消");
this.Invoke(取消业务, new EventArgs());
return ActivityExecutionStatus.Canceling;
// return ActivityExecutionStatus.Closed;
}
  
void 正常业务(object sender, EventArgs e)
{
System.Console.WriteLine("wxwinter");
ActivityExecutionContext aec = sender as ActivityExecutionContext;
aec.CloseActivity();
}
  
void 取消业务(object sender, EventArgs e)
{
//用于处理取消是否恢复的业务
ActivityExecutionContext aec = sender as ActivityExecutionContext;
aec.CloseActivity();
}
  }

  •  
 

  容器控件Activity

通过AEC解读WF的核心原理(十)取消与取消处理器

public class 容器控件: SequenceActivity
  {
    public 容器控件()
    {
      InitializeComponent();
    }
  
[System.Diagnostics.DebuggerNonUserCode]
private void InitializeComponent()
{
this.CanModifyActivities = true;
this.内容控件1 = new wxwinterAecTest.内容控件();
this.内容控件1.Name = "内容控件1";
this.Activities.Add(this.内容控件1);
this.CanModifyActivities = false;
}
  
private 内容控件 内容控件1;
  
protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
{
this.内容控件1.Closed += activity11_Closed;
this.内容控件1.Executing+=new EventHandler<ActivityExecutionStatusChangedEventArgs>(activity11_Executing);
executionContext.ExecuteActivity(this.内容控件1);
return ActivityExecutionStatus.Executing;
  
}
  
bool IsCancel = false;
  
void activity11_Executing(object sender, ActivityExecutionStatusChangedEventArgs e)
{
IsCancel = true; //一个模拟要取消的业务情形
if (IsCancel)
{
ActivityExecutionContext aec = sender as ActivityExecutionContext;
aec.CancelActivity(this.内容控件1);
}
}
  
void activity11_Closed(object sender, ActivityExecutionStatusChangedEventArgs e)
{
e.Activity.Closed -= activity11_Closed;
ActivityExecutionContext aec = sender as ActivityExecutionContext;
aec.CloseActivity();
}
  }

 

  测试用工作流

通过AEC解读WF的核心原理(十)取消与取消处理器

public class Workflow1: SequentialWorkflowActivity
{
private 容器控件 容器控件1;
    public Workflow1()
    {
      InitializeComponent();
    }
  
[System.Diagnostics.DebuggerNonUserCode]
private void InitializeComponent()
{
this.CanModifyActivities = true;
this.容器控件1 = new wxwinterAecTest.容器控件();
//
// 容器控件1
//
this.容器控件1.Name = "容器控件1";
//
// Workflow1
//
this.Activities.Add(this.容器控件1);
this.Name = "Workflow1";
this.CanModifyActivities = false;
}
  }

  宿主

class Program
{
static void Main()
{
WorkflowRuntime workflowRuntime = new WorkflowRuntime();
workflowRuntime.WorkflowCompleted +=new EventHandler<WorkflowCompletedEventArgs>(workflowRuntime_WorkflowCompleted);
workflowRuntime.WorkflowTerminated +=new EventHandler<WorkflowTerminatedEventArgs>(workflowRuntime_WorkflowTerminated);
workflowRuntime.WorkflowIdled+=new EventHandler<WorkflowEventArgs>(workflowRuntime_WorkflowIdled);
WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(Workflow1));
instance.Start();
  
System.Console.Read();
  
}
  
static void workflowRuntime_WorkflowIdled(object sender, WorkflowEventArgs e)
{
System.Console.WriteLine("WorkflowIdled");
}
  
static void workflowRuntime_WorkflowTerminated(object sender, WorkflowTerminatedEventArgs e)
{
System.Console.WriteLine("Terminated" + e.Exception.Message);
}
  
static void workflowRuntime_WorkflowCompleted(object sender, WorkflowCompletedEventArgs e)
{
System.Console.WriteLine("WorkflowCompleted");
}
  
}


 

  运行结果

  IsCancel = true;

通过AEC解读WF的核心原理(十)取消与取消处理器

  IsCancel = false

通过AEC解读WF的核心原理(十)取消与取消处理器

  例子:取消处理器CancellationHandlerActivity 支持取消的控件Activity

通过AEC解读WF的核心原理(十)取消与取消处理器

public class 支持取消的控件 : SequenceActivity
{
protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
{
this.EnabledActivities[0].Closed +=Activity_Closed;
executionContext.ExecuteActivity(this.EnabledActivities[0]);
return ActivityExecutionStatus.Executing;
}
  
void Activity_Closed(object sender, ActivityExecutionStatusChangedEventArgs e)
{
ActivityExecutionContext aec = sender as ActivityExecutionContext;
aec.CloseActivity();
}
  
protected override ActivityExecutionStatus Cancel(ActivityExecutionContext executionContext)
{
foreach (var v in this.Activities)
{
if (v is CancellationHandlerActivity)
{
v.Closed += CancellationHandlerActivity_Closed;
executionContext.ExecuteActivity(v);
return ActivityExecutionStatus.Canceling;
}
}
return ActivityExecutionStatus.Closed;
}
  
void CancellationHandlerActivity_Closed(object sender, ActivityExecutionStatusChangedEventArgs e)
{
ActivityExecutionContext aec = sender as ActivityExecutionContext;
aec.CloseActivity();
}
  
}

 

  可取消的容器Activity

通过AEC解读WF的核心原理(十)取消与取消处理器

public class 可取消的容器 : SequenceActivity
{
protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
{
this.EnabledActivities[0].Closed += activity_Closed;
this.EnabledActivities[0].Executing += activity_Executing;
executionContext.ExecuteActivity(this.EnabledActivities[0]);
return ActivityExecutionStatus.Executing;
}
public bool 是否取消 { get; set; }
void activity_Executing(object sender, ActivityExecutionStatusChangedEventArgs e)
{
if (是否取消)
{
ActivityExecutionContext aec = sender as ActivityExecutionContext;
aec.CancelActivity(this.EnabledActivities[0]);
}
}
  
void activity_Closed(object sender, ActivityExecutionStatusChangedEventArgs e)
{
e.Activity.Closed -= activity_Closed;
ActivityExecutionContext aec = sender as ActivityExecutionContext;
aec.CloseActivity();
}
}

  测试用工作流

通过AEC解读WF的核心原理(十)取消与取消处理器

通过AEC解读WF的核心原理(十)取消与取消处理器

 

通过AEC解读WF的核心原理(十)取消与取消处理器

通过AEC解读WF的核心原理(十)取消与取消处理器

通过AEC解读WF的核心原理(十)取消与取消处理器

public class Workflow1: SequentialWorkflowActivity
{
private CodeActivity 正常路径业;
private 支持取消的控件 支持取消的控件1;
private CodeActivity 取消业务路径;
private CancellationHandlerActivity cancellationHandlerActivity1;
private 可取消的容器 可取消的容器1;
  
    public Workflow1()
    {
      InitializeComponent();
    }
[System.Diagnostics.DebuggerNonUserCode]
private void InitializeComponent()
{
this.CanModifyActivities = true;
this.取消业务路径 = new System.Workflow.Activities.CodeActivity();
this.cancellationHandlerActivity1 = new System.Workflow.ComponentModel.CancellationHandlerActivity();
this.正常路径业 = new System.Workflow.Activities.CodeActivity();
this.支持取消的控件1 = new wxwinterAecTest.支持取消的控件();
this.可取消的容器1 = new wxwinterAecTest.可取消的容器();
//
// 取消业务路径
//
this.取消业务路径.Name = "取消业务路径";
this.取消业务路径.ExecuteCode += new System.EventHandler(this.取消业务路径_ExecuteCode);
//
// cancellationHandlerActivity1
//
this.cancellationHandlerActivity1.Activities.Add(this.取消业务路径);
this.cancellationHandlerActivity1.Name = "cancellationHandlerActivity1";
//
// 正常路径业
//
this.正常路径业.Name = "正常路径业";
this.正常路径业.ExecuteCode += new System.EventHandler(this.正常路径业_ExecuteCode);
//
// 支持取消的控件1
//
this.支持取消的控件1.Activities.Add(this.正常路径业);
this.支持取消的控件1.Activities.Add(this.cancellationHandlerActivity1);
this.支持取消的控件1.Name = "支持取消的控件1";
//
// 可取消的容器1
//
this.可取消的容器1.Activities.Add(this.支持取消的控件1);
this.可取消的容器1.Name = "可取消的容器1";
this.可取消的容器1.是否取消 = true;
//
// Workflow1
//
this.Activities.Add(this.可取消的容器1);
this.Name = "Workflow1";
this.CanModifyActivities = false;
}
  
private void 正常路径业_ExecuteCode(object sender, EventArgs e)
{
System.Console.WriteLine("正常执行");
}
  
private void 取消业务路径_ExecuteCode(object sender, EventArgs e)
{
System.Console.WriteLine("取消执行");
}
  }

 

  宿主

class Program
{
static void Main()
{
WorkflowRuntime workflowRuntime = new WorkflowRuntime();
workflowRuntime.WorkflowCompleted +=new EventHandler<WorkflowCompletedEventArgs>(workflowRuntime_WorkflowCompleted);
workflowRuntime.WorkflowTerminated +=new EventHandler<WorkflowTerminatedEventArgs>(workflowRuntime_WorkflowTerminated);
workflowRuntime.WorkflowIdled+=new EventHandler<WorkflowEventArgs>(workflowRuntime_WorkflowIdled);
WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(Workflow1));
instance.Start();
  
System.Console.Read();
  
}
  
static void workflowRuntime_WorkflowIdled(object sender, WorkflowEventArgs e)
{
System.Console.WriteLine("WorkflowIdled");
}
  
static void workflowRuntime_WorkflowTerminated(object sender, WorkflowTerminatedEventArgs e)
{
System.Console.WriteLine("Terminated" + e.Exception.Message);
}
  
static void workflowRuntime_WorkflowCompleted(object sender, WorkflowCompletedEventArgs e)
{
System.Console.WriteLine("WorkflowCompleted");
}
  
}

  运行结果

通过AEC解读WF的核心原理(十)取消与取消处理器

 

通过AEC解读WF的核心原理(十)取消与取消处理器

通过AEC解读WF的核心原理(十)取消与取消处理器

通过AEC解读WF的核心原理(十)取消与取消处理器

 

 

  容器控件Activity

通过AEC解读WF的核心原理(十)取消与取消处理器

public class 容器控件: SequenceActivity
  {
    public 容器控件()
    {
      InitializeComponent();
    }
  
[System.Diagnostics.DebuggerNonUserCode]
private void InitializeComponent()
{
this.CanModifyActivities = true;
this.内容控件1 = new wxwinterAecTest.内容控件();
this.内容控件1.Name = "内容控件1";
this.Activities.Add(this.内容控件1);
this.CanModifyActivities = false;
}
  
private 内容控件 内容控件1;
  
protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
{
this.内容控件1.Closed += activity11_Closed;
this.内容控件1.Executing+=new EventHandler<ActivityExecutionStatusChangedEventArgs>(activity11_Executing);
executionContext.ExecuteActivity(this.内容控件1);
return ActivityExecutionStatus.Executing;
  
}
  
bool IsCancel = false;
  
void activity11_Executing(object sender, ActivityExecutionStatusChangedEventArgs e)
{
IsCancel = true; //一个模拟要取消的业务情形
if (IsCancel)
{
ActivityExecutionContext aec = sender as ActivityExecutionContext;
aec.CancelActivity(this.内容控件1);
}
}
  
void activity11_Closed(object sender, ActivityExecutionStatusChangedEventArgs e)
{
e.Activity.Closed -= activity11_Closed;
ActivityExecutionContext aec = sender as ActivityExecutionContext;
aec.CloseActivity();
}
  }


相关教程