抓住另一个类引发的异常?

时间:2014-04-07 12:55:36

标签: c# exception-handling

我以为我可以捕获我项目中另一个类抛出的异常,但我必须做错了。在第一堂课中,我用try / 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没有捕获异常的原因?

3 个答案:

答案 0 :(得分:0)

在IDE中断开以通知抛出异常。如果再次按F5继续运行,则应该命中catch处理程序。

答案 1 :(得分:0)

与异常没有任何类相关。您的调用代码(ImportPowerPoint.CreateTitle(...);)应该能够捕获CreateTitle()抛出的异常。

查看您的Visual Studio是否配置为捕获所有异常(与仅捕获未处理的异常相反):

  1. 转到'调试'菜单
  2. 选择'例外...'
  3. 取消选中' Thrown'下的复选框。柱
  4. 您通常希望IDE捕获未处理的异常,因此我会检查其他列。

答案 2 :(得分:0)

这里的问题似乎是因为这是一个多线程程序。我正在考虑使用AppDomain.UnhandledException Event来处理我的例外情况。