什么在投掷活动的例外字段中

时间:2011-08-18 14:45:12

标签: c# workflow-foundation-4

有人能告诉我如何使用投掷活动的例外字段吗?

我需要具体的例子。我正在抛出异常,因为我需要在调用代码中捕获它,然后运行一些清理代码。

感谢您的帮助

理查德

回复Chuck

我尝试了以下操作,工作流取消,但执行没有进入捕获。 知道为什么吗?

public class AbortException : System.Exception
{
}

class manager
{
    ...

    try
    {
        workflowApp.Run();
    }
    catch (AbortException ea)
    {

    }
    catch (Exception ex)
    {

    }

    ...
}

,异常属性为:New AbortException

2 个答案:

答案 0 :(得分:3)

您还在使用WorkflowApplication吗?

它是否在不同的线程上执行,因此围绕Run()的C#try / catch将无济于事。您需要在OnUnhandledException事件中添加一个处理程序,正如我在其他问题中指出的那样。

WorkflowApplication wfApp = new WorkflowApplication(new YourWorkflow());
wfApp.OnUnhandledException = e => UnhandledExceptionAction.Abort;
wfApp.Run();

答案 1 :(得分:2)

最简单的方法是创建一个扩展异常并传递任何所需值的类,如:

public class MyError : Exception
{
   public MyError() : base(string.Empty) {}
   public MyError(Exception e) : base(e.Message) {}
   public int MyCustomValue { get; set; }
}

然后使用它,(将值5传递给catch处理程序)

throw new MyError(){ MyCustomValue = 5 };

然后在你的捕获

try{}
catch(MyError ex)
{
    Console.Write(ex.MyCustomValue.ToString());
}