在事件中提供异常对象

时间:2013-11-26 11:11:37

标签: c# .net

我正在实现ConvertDocuments()API。此API采用一组输入文件并将每个文件转换为另一种文件格式。如果任何文档无法转换(可能是一个损坏的文件)我不想通过引发异常关闭整个转换作业。我的类(ConverterError事件)上有一个事件处理程序,使用该用户可以获取错误信息。为了提供有关错误的完整详细信息,我还在事件参数中包含了异常对象。如果我遵循这种模式,我想知道是否有任何缺点。

ConvertDocuments(List<string> InputDocsList, ...)
{
    foreach(file in InputDocsList)
    {
        try
        {
            Convert(file);
        }
        catch(exception ex)
        {
            OnConverterError(new ConverterErrorEventArgs(ex.Message, ex));
        }
    } 
}

OnConverterError(ConverterErrorEventArgs e)
{    
    EventHandler<ConverterErrorEventArgs> handler = ConverterError;
    if (handler != null)
    {
        handler(this, e);
    }
}

class ConverterErrorEventArgs: EventArgs
{

    ConverterErrorEventArgs(string message, Exception innerException)
    {
    ...
    }
    string Message
    {
        get{...}
    }
    Exception InnerException
    {
        get{return innerException}
    }
}

1 个答案:

答案 0 :(得分:2)

我看不出这种方法存在任何特殊问题,但您可能会将所有异常捆绑到AggregateException并将其一次性返回。

http://msdn.microsoft.com/en-us/library/system.aggregateexception(v=vs.110).aspx

更新

这是一篇文章的链接,该文章描述了这种使用AggregateException的方式,这可能很有用:http://richhewlett.com/2010/05/12/raising-multiple-exceptions-with-aggregateexception/