处理未处理的异常

时间:2011-09-17 23:34:41

标签: c# wpf exception-handling

我有一个动态加载图像的应用程序。假设该图像不存在,我们希望通知用户然后退出。在我的主循环中,我有异常处理,当我使用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");
            }
            ...
    }

但是,如果我在Grid_Click中放置try-catch块,它会捕获该异常。

2 个答案:

答案 0 :(得分:1)

设计Grid-Click方法中的catch语句无法捕获MainWindow()中引发的异常,因为对Grid_Click的方法调用不在内部try阻止。

在触发click事件时调用Grid_Click方法,该事件处于异步时间。只有在IOException {{}}} {{}}}块内投放的try才会被您在上面列出的MainWindow语句捕获。

答案 1 :(得分:1)

你所谓的'主循环'只是一个构造函数。代码不会在它的控制下执行。