我以为我可以在我的项目中捕获另一个类抛出的异常,但我一定是做错了。在第一类中,我周围我打电话给其他类用try/catch块:另一个类抛出的catch异常?
try
{
ImportPowerPoint.CreateTitle(textBoxPpt.Text, textBoxPkg.Text);
}
catch (FormatException ex)
{
MessageBox.Show(ex.Message, "ERROR",
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
}
在第二类中,这就是我抛出异常:
if (!_layoutMap[(int)Layouts.A].ContainsValue(Fields.Title))
throw new FormatException("Standard (A) Layout does not contain a title.");
if (!_layoutMap[(int)Layouts.A].ContainsValue(Fields.Txt1))
throw new FormatException("Standard (A) Layout does not contain a txt1.");
if (!_layoutMap[(int)Layouts.A].ContainsValue(Fields.Prompt))
throw new FormatException("Standard (A) Layout does not contain a prompt.");
当我运行程序时,它会立即中断引发异常的地方,而不是显示我在try/catch块中定义的错误窗口。我没有正确处理这个try/catch吗?
为了澄清,我强制通过删除我解析的PowerPoint中的某些部分来发生异常。例如,当程序失败时,因为我删除了Title
字段,所抛出的异常的类型是FormatException。调用类中的我的catch
不应该处理这个问题吗?
编辑:我想我可能已经找到了导致这种情况发生的原因。抛出的异常在另一个线程中。所以,因为它在另一个线程中,这是否意味着这就是为什么我的try/catch没有捕获异常?
只是为了澄清你是说'ImportPowerPoint.CreateTitle'方法抛出没有被捕获的异常?因为它看起来应该捕获所有'FormatException'并显示你的消息框。 – Chris
实际上,这可能很重要,实际的异常正在从'ImportPowerPoint.CreateTitle'调用的另一个类中抛出。我认为,无论异常发生在何处,无论是在立即调用的类中,还是从该类中调用的类,如果这是合理的,调用类将捕获该异常。 – Kevin
如果该方法调用其他类的东西,那么catch应该仍然可以捕获。代码在其他类中的事实并不是问题(并且实际上通常是预料之中的,因为您经常捕获框架类中的异常而不是您自己的代码)。你肯定在这段代码中(并且它不会从代码中的其他地方抛出异常)? – Chris