Невозможно сгенерировать исключение в блоке catch - PullRequest
0 голосов
/ 28 марта 2020

У меня есть класс, который не должен показывать никаких диалогов конечному пользователю. В случае, если пользователь передал неправильный путь к файлу, я попытался создать исключение и обработать его в соответствующем классе. Однако, несмотря на инструкцию throw, Visual Studio показывает диалог исключений и прерывает работу приложения после его появления (режим отладки). В режиме Release приложение просто вылетает после неверного указания пути к файлу. Что я делаю не так?

GuyManager.cs:

private IStorageFile latestGuyFile;
public IStorageFile LatestGuyFile { get { return latestGuyFile; } }
public string Path { get; set; }


 public async void ReadGuyAsync()
    {
        if (String.IsNullOrWhiteSpace(Path))
            return;

        try
        {
            latestGuyFile = await StorageFile.GetFileFromPathAsync(Path);
        }
        catch (Exception ex)
        {
            Debug.WriteLine("Error occured: " +ex.Message);
            Debug.WriteLine(ex.StackTrace);
            throw;
        }

MainPage. xml .cs:

private async void loadGuy_Click(object sender, RoutedEventArgs e)
    {
        try
        {
            guyManager.ReadGuyAsync();
        }
        catch (Exception ex)
        {
            MessageDialog dialog = new MessageDialog("Error" + ex.Message);
            await dialog.ShowAsync();
        }
    }

1 Ответ

0 голосов
/ 28 марта 2020

Я вижу проблему в вашем обработчике событий Click. Вы определяете это как asyn c, но вы ничего не ожидаете.

Вам следует изменить метод ReadGuyAsyn c, чтобы он возвращал задачу вместо void, например:

public async Task ReadGuyAsync()

, а в методе loadGuy_Click вам следует дождаться это:

await guyManager.ReadGuyAync();

...