I have an application where I load an image dynamically. Let’s say, that image doesn’t exists and we want to notify the user and then exit. In my main loop, I have exception handling which works just fine when I’m reading files with StreamReader. However, if I am throwing exception from another function, the app just crashes and in the error report I see thrown exception (IOException). To get an idea of the app:
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");
}
...
}
BUT, if I put try-catch block inside Grid_Click, it catches that exception.
The exception that is thrown in
Grid-Clickwould not be caught by thecatchstatement in theMainWindow()method by design, since the method call toGrid_Clickis not inside thattryblock.The
Grid_Clickmethod is called when the click event is fired, which is at an asynchronous time. OnlyIOExceptions thrown inside thetryblock inMainWindowwill be caught by thatcatchstatement you have listed above.