TryCatch Activity捕获一个异常捕获而不是在调用堆栈中进一步重新抛出?

时间:2015-03-02 15:22:24

标签: c# workflow-foundation-4 workflow-foundation

考虑这样的事情:

protected overrid void Execute(CodeActivityContext context)
{
    try
    {
        // this method can throw exception, but it's OK for rest of the Workflow
        UserStore.PrepareUserData(WorkflowData.Get(context).SecurityID);
        [...]
    }
    catch (Exception exc)
    {
        Logger.Write(string.Format("There was an exception while preparing execution data for user ID: {0}. Operation ID: {1}", WorkflowData.Get(context).SecurityID, context.ActivityInstanceId), "Workflow, 3, 305, TraceEventType.Warning, "PrepareDataActivity");
    }
}

UserStore.PrepareUserData方法引发的异常被CodeActivity中的try..catch块捕获。问题是更高级别的try..catch活动捕获了异常。 是否有可能防止在更高级别捕获此异常?

2 个答案:

答案 0 :(得分:0)

  

是否可以防止在更高级别捕获此异常?

这正是你在你的例子中所做的。

此:

catch (Exception exc)
{
    Logger.Write(string.Format("There was an exception while preparing execution data 
                                for user ID: {0}. Operation ID: {1}", 
                                WorkflowData.Get(context).SecurityID, 
                                context.ActivityInstanceId), "Workflow, 3, 305,
                                TraceEventType.Warning, "PrepareDataActivity");
}

吞下异常时,不会使用throw重新抛出异常。这意味着顶级catch块实际上不会捕获任何内容,因为它已经在较低级别的块处理。

答案 1 :(得分:0)

在调试xaml活动中的每个项目期间,我发现下一个If活动中的错误导致TryCatchActivity中处理异常。我使用类似的东西检查变量null:

SomeVar = Nothing

而不是

SomeVar is Nothing

无论如何,谢谢大家的努力。