Обработка необработанных исключений - PullRequest
0 голосов
/ 18 сентября 2011

У меня есть приложение, в котором я загружаю изображение динамически.Допустим, это изображение не существует, и мы хотим уведомить пользователя и затем выйти.В моем основном цикле у меня есть обработка исключений, которая прекрасно работает, когда я читаю файлы с StreamReader.Однако, если я выбрасываю исключение из другой функции, приложение просто падает, и в отчете об ошибке я вижу выброшенное исключение (IOException).Чтобы получить представление о приложении:

public MainWindow()
{
    try {
        InitializeComponent();
        Load(myFile);
    } catch (IOException e) {
        MessageBox.Show("Opening failure.");
        Application.Current.Shutdown();
    } 
}

public void Load(string imgPath)
{
    string tmpStr;
    string[] tmp;
    using (StreamReader sr = new StreamReader("myFile.txt", System.Text.Encoding.Default)) {
        while ((tmpStr = sr.ReadLine()) != null) {
            tmp = tmpStr.Split(' ');

            ...
        }
    }
}

    private void Grid_Click(object sender, RoutedEventArgs e)
    {
            ...
            if (!File.Exists(myFile)) {
                throw new IOException("File doesnt exist");
            }
            ...
    }

НО, если я добавлю блок try-catch внутри Grid_Click, он поймает это исключение.

Ответы [ 2 ]

1 голос
/ 18 сентября 2011

То, что вы называете «основным циклом», является просто конструктором. Код не выполняется под его контролем.

1 голос
/ 18 сентября 2011

Исключение, которое выдается в Grid-Click, не будет перехвачено оператором catch в методе MainWindow(), так как вызов метода Grid_Click не находится внутри этого блока try.

Метод Grid_Click вызывается при срабатывании события click, которое происходит в асинхронное время.Только IOException s, брошенные в блок try в MainWindow, будут обнаружены тем оператором catch, который вы перечислили выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...