C# 如何查找OpenReadAsync方法引发的异常

C# 如何查找OpenReadAsync方法引发的异常,c#,windows-8,exception-handling,windows-store-apps,C#,Windows 8,Exception Handling,Windows Store Apps,考虑以下代码: using (IRandomAccessStream stream = await storageFile.OpenReadAsync()) { using (DataReader dataReader = new DataReader(stream)) { uint length = (uint)stream.Size; await dataReader.LoadAsync(length); txtbox.Text

考虑以下代码:

using (IRandomAccessStream stream = await storageFile.OpenReadAsync())
{
    using (DataReader dataReader = new DataReader(stream))
    {
        uint length = (uint)stream.Size;
        await dataReader.LoadAsync(length);
        txtbox.Text = dataReader.ReadString(length);
    }
}

storageFile.OpenReadAsync
可能引发异常,
System.IO.FileNotFoundException
是一种可能的异常类型。MSDN topic
StorageFile.OpenReadAsync
不包含此方法引发的异常类型列表。如何从文档中找到此信息?我可以捕获
异常
类型,但这是糟糕的编程实践。

在无法找到所有异常列表的情况下,我通常使用VS SDK的方法:

您可以反编译Microsoft.VisualStudio.Shell.11.0.dll,以查找ErrorHandler定义为关键的异常列表:

  • StackOverflowException
  • AccessViolationException
  • AppDomainUnloadexception
  • BadImageFormatException
  • 除零异常
在Windows运行时的情况下,我认为验证Exception中的一些值也是很好的,比如E_OUTOFMEMORY、E_ABORT、E_FAIL以及其他一些值


我还发现这对记录异常非常有帮助。我不仅将其用于未处理的异常,而且还用于类似这样的情况,在这种情况下,我不知道该方法会抛出什么。它允许使用
BugSenseHandler.Instance.LogException
发送自定义日志记录(包括异常),因此我只需收集不同类型异常的信息(包括具有某些意外HResult的异常),并在每个版本中对我的应用程序进行一些改进

您是否尝试过反汇编.dll?StorageFile是Windows运行时的一部分。不要认为可以反汇编windows运行时来查找异常。使用
ErrorHandler.IsCriticalException
是个好主意。这减少了使用
catch(Exception)
的羞耻感。我希望微软能改进他们的Windows应用商店文档。谢谢
try
{
    // ...
}
catch(Exception e)
{
    if (ErrorHandler.IsCriticalException(e))
    {
        throw;
    }

    // log it or show something to user
}