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 topicStorageFile.OpenReadAsync
不包含此方法引发的异常类型列表。如何从文档中找到此信息?我可以捕获异常
类型,但这是糟糕的编程实践。在无法找到所有异常列表的情况下,我通常使用VS SDK的方法:
您可以反编译Microsoft.VisualStudio.Shell.11.0.dll,以查找ErrorHandler定义为关键的异常列表:
- StackOverflowException
- AccessViolationException
- AppDomainUnloadexception
- BadImageFormatException
- 除零异常
我还发现这对记录异常非常有帮助。我不仅将其用于未处理的异常,而且还用于类似这样的情况,在这种情况下,我不知道该方法会抛出什么。它允许使用
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
}