在工作流内部调用宿主的静态方法终止工作流的执行
2007-09-06 10:50
357 查看
在工作流内部调用宿主的静态方法终止工作流的执行
业务说明:张三,李四与王五三人审核一份稿件。如果张三审核通过则提交给李四审核,李四审核通过再提交给王五审核。三个人都通过,则稿件审核通过。如果任意一人不通过则工作流结束。假设现在张三审核通过,李四审核不通过,然后结束了工作流
下面是工作流图:
工作流的内部方法:
public sealed partial class Workflow1: SequentialWorkflowActivity
{
public Workflow1()
{
InitializeComponent();
}
private void 张三审核_ExecuteCode(object sender, EventArgs e)
{
Console.WriteLine("张三通过");
}
private void 李四审核_ExecuteCode(object sender, EventArgs e)
{
Console.WriteLine("李四不通过");
// 调用宿主的静态方法终止工作流
Program.Stop();
}
private void 王五审核_ExecuteCode(object sender, EventArgs e)
{
Console.WriteLine("王五通过");
}
}
宿主类:
class Program
{
static WorkflowRuntime workflowRuntime;
static WorkflowInstance instance;
static AutoResetEvent waitHandle;
static void Main(string[] args)
{
workflowRuntime = new WorkflowRuntime();
waitHandle = new AutoResetEvent(false);
workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e) { waitHandle.Set(); };
workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e)
{
Console.WriteLine(e.Exception.Message);
waitHandle.Set();
};
instance = workflowRuntime.CreateWorkflow(typeof(BreakWorkflow.Workflow1));
instance.Start();
waitHandle.WaitOne();
}
/// <summary>
/// 终止工作流的实例
/// </summary>
public static void Stop()
{
// 将阻止工作流的线程继续,否则在执行Terminate()方法时会产生异常
waitHandle.Set();// 如果不执行该语句,在执行Terminate()方法时会产生异常
instance.Terminate("终止信息");
}
}
执行结果如下:
相关文章推荐
- WWF中宿主程序(即调用工作流的程序)和工作流内部交换数据的几种方法(情况)。
- 指在一线程里面调用另一线程join方法时,表示将本线程阻塞直至另一线程终止时再执行
- static{}(即static块),会在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法
- javaScript 自执行函数—保留异步方法调用的内部变量
- 是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?
- js 通过调用方法终止js代码继续执行的问题(采用throw解决)
- 实体类调用泛型父类中的静态方法中执行CRUD——第一版
- 实体类调用泛型父类中的静态方法中执行CRUD——第二版
- Java - 是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?
- (23)对象调用非静态方法执行过程、静态方法调用内存执行过程
- 静态方法的内部可以不可以调用非静态的方法吗?
- 关于静态方法不能调用类中的非静态属性的理解
- html 解决表单提交时调用jquery ajax出现执行了请求,但进入了error方法里面
- Java中通过Executors调用静态方法来提供四种线程池介绍
- WebBrowser执行脚本和调用外部方法。
- java 程序加载过程---3--类中申明同时申明类的静态对象 创建类的实例 访问类的静态变量 调用类的静态方法 使用反射方法 初始化类的子类对象 直接使用java.exe 调用某个类
- 静态方法中调用非静态方法
- Spring AOP不拦截从对象内部调用的方法原因
- java静态代码块、初始化块和构造方法的执行顺序
- 关于Java多线程调用同一静态工具类方法时