3

次のコードを検討してください。

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可能性があります。考えられる例外の種類の 1 つです。MSDN トピックStorageFile.OpenReadAsync http://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.storagefile.openreadasyncには、このメソッドによってスローされる例外の種類のリストが含まれていません。ドキュメントからこの情報を見つけるにはどうすればよいですか? 型をキャッチすることはできますExceptionが、これは不適切なプログラミング手法です。

4

1 に答える 1

1

例外のすべてのリストを見つけることが不可能な場合は、通常、VS SDK ErrorHandler.IsCriticalExceptionからのアプローチを使用します。

try
{
    // ...
}
catch(Exception e)
{
    if (ErrorHandler.IsCriticalException(e))
    {
        throw;
    }

    // log it or show something to user
}

を逆コンパイルしMicrosoft.VisualStudio.Shell.11.0.dllて、ErrorHandler が Critical と定義する例外のリストを見つけることができます。

  • StackOverflowException
  • アクセス違反例外
  • AppDomainUnloadedException
  • BadImageFormatException
  • DivideByZeroException

Windows ランタイムの場合、E_OUTOFMEMORY、E_ABORT、E_FAIL など、例外のHResult値の一部を確認することも良いと思います。

また、BugSenseは例外をログに記録するのに非常に役立ちます。未処理の例外だけでなく、このメソッドが何をスローできるかわからないこのような状況でも使用します。を使用してカスタム ログ (例外を含む) を送信できるためBugSenseHandler.Instance.LogException、さまざまな種類の例外 (予期しない HResult を含む例外を含む) に関する情報を収集し、リリースごとにアプリの改善を行います。

于 2013-04-30T18:00:19.263 に答える