2016-10-21 2 views
0

У меня есть метод, в котором я проверяю, если файл существует в файловой системе (UWP):FileNotFoundException, но поймать блок не введен (метода Асинхронного)

private async Task<bool> FileExistsAsync(string filename) 
    { 
     try 
     { 
      if (filename != null) 
      { 
       var item = await StorageFile.GetFileFromPathAsync(filename); // FileNotFoundException happens here 
       if (item != null) 
        return true; 
      } 
      return false; 
     } 
     catch (Exception e) // I Expect the debugger to handle the FileNotFoundException here, but it never happens 
     { 
      return false; 
     } 
    } 

Когда я пытаюсь получить несуществующий файл с StorageFile.GetFileFromPathAsync, я получаю исключение. По какой-то причине он не обрабатывается моим поймать блок, но выглядит это вместо:

enter image description here

То, что я пытался:

  • Явного обрабатывать FileNotFoundException
  • Добавить Try -catch-block внутри if-statement

Обратите внимание, что этот метод необходим оставаться асинхронным, потому что у меня есть другой материал, который происходит в этом методе, который я удалил, чтобы предоставить Minimal, Complete, and Verifiable example.

Почему отладчик не входит в мой блок catch при выбросе FileNotFoundException?

+0

попробуйте это. catch (Исключение) { return false; } –

+0

@vivek Это ничего не изменило. Кроме того, мне нужен параметр в моем коде (как я уже сказал, я удалил ненужные части) –

ответ

3

В всплывающем окне исключения я вижу [x] Break when this exception type is thrown. Попробуйте отключить его там или в диалоговом окне «Исключение настроек» (Ctrl-Alt-E в моей системе или меню «Отладка»> «Windows») «Настройки исключения»).

+0

Спасибо, что вызвало мою проблему. :) –

0
var item = await StorageFile.GetFileFromPathAsync(filename); 

У вас есть попытка уловить в этой функции? если да, то добавьте

throw 

в улове

попробовать это: Why can't I catch an exception from async code? и это: Catch an exception thrown by an async method может помочь вам.

+0

Я не могу изменить код 'GetFileFromPathAsync', потому что это из пространства имен' Windows.Storage'. –

Смежные вопросы