1. 程式人生 > >workflow如何設置書簽

workflow如何設置書簽

dem err 需要 書簽 ring demo readline resume 異常

設計workflow時候,如果通過代碼向向工作流傳入數據,則使用代碼流CodeActivity類型的活動,如果有想要加入書簽,則需要使用NaviteActivity類型的活動。創建工作流的同時給工作流數據。

public partial class Form1 : Form
{
private WorkflowApplication WorkflowApp;
public Form1()
{
InitializeComponent();
}

private void btnStartWF_Click(object sender, EventArgs e)
{

//WorkflowInvoker.Invoke(new DemoActivity1());

//創建工作流可以同時傳參數
WorkflowApp = new WorkflowApplication(new DemoActivity1(), new Dictionary<string, object>()
{
{"BookMarkName",this.txtMarkName.Text }
});

//給工作流實例綁定進入空閑狀態時想要執行的事件
WorkflowApp.Idle += AfterWorkflowIdle;

#region 其他的
WorkflowApp.OnUnhandledException += OnWfAppException;
WorkflowApp.Unloaded = a => { Console.WriteLine("工作流卸載了..."); };
WorkflowApp.Aborted = a => { Console.WriteLine("工作流中止了.."); };
#endregion

WorkflowApp.Run();


}

//出現異常時調用的方法
private UnhandledExceptionAction OnWfAppException(WorkflowApplicationUnhandledExceptionEventArgs arg)
{
Console.WriteLine("出現未處理的異常"+arg.UnhandledException.ToString());
return UnhandledExceptionAction.Terminate;
}

//工作流進入空閑時執行的方法
private void AfterWorkflowIdle(WorkflowApplicationIdleEventArgs obj)
{
Console.WriteLine("工作流停止了");
}

private void continueMark_Click(object sender, EventArgs e)
{
WorkflowApp.ResumeBookmark(txtMarkName.Text, int.Parse(txtMoney.Text));
}
}



創建繼承NaviteActivity類型的子類,並且定義一個輸入參數InArgument<string>,來接受工作流的參數傳入的值
來創建書簽,同時給書簽一個恢復書簽所要執行的方法。
定義一個輸出參數OutArgument<int>,向工作流的變量傳出值,使書簽能夠繼續進行。同時若想書簽能夠
使用,則必須重定義CanInduceIdle,並且賦值為true
 public sealed class InputMoneyActivity1 : NativeActivity
    {
        // 定義一個字符串類型的活動輸入參數
        public InArgument<string> InBookMarkName { get; set; }

        protected override bool CanInduceIdle
        {
            get
            {
                return true;
            }
        }

        public OutArgument<int> OutMoney { get; set; }

        // 如果活動返回值,則從 CodeActivity<TResult>
        // 並從 Execute 方法返回該值。
        protected override void Execute(NativeActivityContext context)
        {
            // 獲取 Text 輸入參數的運行時值
            //string text = context.GetValue(this.Text);

            //int money = int.Parse(Console.ReadLine());
            //context.SetValue(OutMoney, money);

            //拿到書簽名
            string bookMark = context.GetValue(InBookMarkName);
            Console.WriteLine("創建書簽");
            //給活動創建書簽
            context.CreateBookmark(bookMark, new BookmarkCallback(CallBackFun));

        }

        //恢復書簽時調用的方法
        private void CallBackFun(NativeActivityContext context, Bookmark bookmark, object value)
        {
            context.SetValue(OutMoney, (int)value);
            Console.WriteLine("書簽繼續執行");

        }
    }

 

workflow如何設置書簽