workflow如何設置書簽
設計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如何設置書簽