zoukankan      html  css  js  c++  java
  • WF4.0 Beta1 WorkflowInvoker

    WorkflowInvoker

    使用 WorkflowInvoker.Invoke静态方法

    public static IDictionary<string, object> Invoke(WorkflowElement workflow);

     

    public static IDictionary<string, object> Invoke(WorkflowElement workflow, IDictionary<string, object> inputs);

     

    public static IDictionary<string, object> Invoke(WorkflowElement workflow, TimeSpan timeout);

     

    public static IDictionary<string, object> Invoke(WorkflowElement workflow, IDictionary<string, object> inputs, TimeSpan timeout);

     

     

    例1:传入参数,并得到结果

    流程

    public sealed class Add : CodeActivity<int>

    {

    public InArgument<int> X { get; set; }

    public InArgument<int> Y { get; set; }

     

    protected override void Execute(CodeActivityContext context)

    {

    int x = X.Get(context);

    int y = Y.Get(context);

     

    context.SetValue(base.Result, x + y);

    }

    }

    调用

     

    static void Main(string[] args)

    {

     

    var p= new Dictionary<string, object> { { "X", 1 }, { "Y", 2 }};

     

    IDictionary<string, object> results = WorkflowInvoker.Invoke(new Add(), p);

    Console.WriteLine( results["Result"]);

     

    Console.ReadLine();

    }

     

    使用 WorkflowInvoker实例

    public WorkflowInvoker(WorkflowElement workflow);

     

    public Collection<object> Extensions { get; }

     

    public event EventHandler<InvokeCompletedEventArgs> InvokeCompleted;

     

    public IAsyncResult BeginInvoke(AsyncCallback callback, object state);

     

    public IAsyncResult BeginInvoke(IDictionary<string, object> inputs, AsyncCallback callback, object state);

     

    public IAsyncResult BeginInvoke(TimeSpan timeout, AsyncCallback callback, object state);

     

    public IAsyncResult BeginInvoke(IDictionary<string, object> inputs, TimeSpan timeout, AsyncCallback callback, object state);

     

    public IDictionary<string, object> EndInvoke(IAsyncResult result);

     

    public IDictionary<string, object> Invoke();

     

    public IDictionary<string, object> Invoke(IDictionary<string, object> inputs);

     

    public IDictionary<string, object> Invoke(TimeSpan timeout);

     

    public IDictionary<string, object> Invoke(IDictionary<string, object> inputs, TimeSpan timeout);

     

    public void InvokeAsync();

     

    public void InvokeAsync(IDictionary<string, object> inputs);

     

    public void InvokeAsync(object userState);

     

    public void InvokeAsync(TimeSpan timeout);

     

    public void InvokeAsync(IDictionary<string, object> inputs, object userState);

     

    public void InvokeAsync(IDictionary<string, object> inputs, TimeSpan timeout);

     

    public void InvokeAsync(TimeSpan timeout, object userState);

     

    public void InvokeAsync(IDictionary<string, object> inputs, TimeSpan timeout, object userState);

     

    例1:InvokeAsync方法与invokeCompleted事件

     

    流程

    public sealed class Add : CodeActivity<int>

    {

    public InArgument<int> X { get; set; }

    public InArgument<int> Y { get; set; }

     

    protected override void Execute(CodeActivityContext context)

    {

    int x = X.Get(context);

    int y = Y.Get(context);

     

    context.SetValue(base.Result, x + y);

    }

    }

    调用

    static void Main(string[] args)

    {

     

    WorkflowInvoker myInvoker = new WorkflowInvoker(new Add());

     

    var p = new Dictionary<string, object> { { "X", 1 }, { "Y", 2 }};

     

    myInvoker.InvokeCompleted += new EventHandler<InvokeCompletedEventArgs>(myInvoker_InvokeCompleted);

     

    myInvoker.InvokeAsync(p);

     

    Console.ReadLine();

    }

     

    static void myInvoker_InvokeCompleted(object sender, InvokeCompletedEventArgs e)

    {

    Console.WriteLine(e.Outputs["Result"]);

    }

     

    例2:BeginInvoke方法与EndInvoke方法

    流程

    public sealed class Add : CodeActivity<int>

    {

    public InArgument<int> X { get; set; }

    public InArgument<int> Y { get; set; }

     

    protected override void Execute(CodeActivityContext context)

    {

    int x = X.Get(context);

    int y = Y.Get(context);

     

    context.SetValue(base.Result, x + y);

    }

    }

    调用

    static void Main(string[] args)

    {

     

    WorkflowInvoker myInvoker = new WorkflowInvoker(new Add());

     

    var p = new Dictionary<string, object> { { "X", 1 }, { "Y", 2 }};

     

    IAsyncResult ir= myInvoker.BeginInvoke(p, new AsyncCallback(callback), myInvoker);

     

    var r = myInvoker.EndInvoke(ir);

     

    System.Console.WriteLine(r["Result"]);

     

    Console.ReadLine();

    }

     

     

     

    static void callback(IAsyncResult asyncResult)

    {

    System.Threading.ManualResetEvent mr = asyncResult.AsyncWaitHandle as System.Threading.ManualResetEvent;

     

    System.Console.WriteLine("callback");

    }

     

    后面我会写一组

    用WorkflowInvoker实现调用子流程的例

    用WorkflowInvoker以回溯方做流程全路径测试的例子

  • 相关阅读:
    Python面向对象高级编程(__slots__、多继承、定制类)-6
    CS231n Lecture6-Training Neural Networks, part I学习笔记
    CS231n Lecture5-Convolutional Neural Networks学习笔记
    CS231n Lecture4-Introduction to Neural Networks学习笔记
    Python面向对象编程(类与实例、数据封装、继承多态、type()、isinstance())-5
    Python模块-4
    alloc和初始化的定义
    块的定义和使用
    属性的定义以及@synthesize的使用
    实例方法和类方法的定义
  • 原文地址:https://www.cnblogs.com/foundation/p/1510971.html
Copyright © 2011-2022 走看看