我有一个动态加载图像的应用程序。假设该图像不存在,我们希望通知用户然后退出。在我的主循环中,我有异常处理,当我使用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块,它会捕获该异常。
答案 0 :(得分:1)
设计Grid-Click
方法中的catch
语句无法捕获MainWindow()
中引发的异常,因为对Grid_Click
的方法调用不在内部try
阻止。
在触发click事件时调用Grid_Click
方法,该事件处于异步时间。只有在IOException
{{}}} {{}}}块内投放的try
才会被您在上面列出的MainWindow
语句捕获。
答案 1 :(得分:1)
你所谓的'主循环'只是一个构造函数。代码不会在它的控制下执行。