未被 catch 捕获的异常
Exception not caught by catch
我想在我的应用程序中使用 WIA,代码如下所示。然而,图中所示的异常并未被 catch 块捕获。
WIA.ICommonDialog wiaCommonDialog = new WIA.CommonDialog();
while (hatNochSeiten)
{
try
{
AktiverScanner.Geraet = AktiverScanner.GeraeteInfo.Connect();
WIA.Item geraetObjekt = null;
geraetObjekt = AktiverScanner.Geraet.Items[1];
geraetObjekt.Properties["Bits Per Pixel"].set_Value(1);
geraetObjekt.Properties["Horizontal Resolution"].set_Value(300);
geraetObjekt.Properties["Vertical Resolution"].set_Value(300);
WIA.ImageFile scanDatei = (ImageFile)wiaCommonDialog.ShowTransfer(geraetObjekt, ScannerModel.wiaFormatJPEG, false);
scanDatei.SaveFile(@"C:\scan_" + System.DateTime.Now.ToString("yyyyMMdd-HHmmss") + "_Seite" + seiten.ToString("000") + ".jpg");
Marshal.ReleaseComObject(scanDatei);
var status = (int)AktiverScanner.Geraet.Properties["Document Handling Status"].get_Value();
hatNochSeiten = (status & AktiverScanner.Eigenschaftlesen(3087)) > 0;
geraetObjekt = null;
scanDatei = null;
seiten++;
}
catch (System.Runtime.InteropServices.COMException comEx)
{
System.Diagnostics.Debugger.Break();
}
catch (Exception ex)
{
System.Diagnostics.Debugger.Break();
}
调试器因这个错误而中断,因为扫描器仍然很忙,但应该从第二个 catch 块中捕获异常。
Visual Studio 显示 "Exception Thrown" (Ausgelöste Ausnahme) 对话框,当:
- 抛出未处理的异常
- 您在 "Exception Settings" 中为某些异常类型启用了 "Break When Thrown",其中一种异常类型是抛出
在后一种情况下,它不会阻止异常被 catch
块正确捕获。当您继续调试时(通常按 F5
或 F10
),程序执行将正确地跳转到适当处理 catch
块的开头。如果您不希望此异常类型再次出现此对话框,请取消选中 "Break when this exception type is thrown" (Bei Auslösen dieses Ausnahmetyps unterbrechen) 选项或取消选中 "System.Runtime.InteropServices.COMException" in 异常设置 window(菜单 -> 调试 -> Windows -> 异常设置)。
如果仍然没有捕获到异常并且有适当的catch
块,另一个原因可能是执行的代码与实际源代码不匹配。
我想在我的应用程序中使用 WIA,代码如下所示。然而,图中所示的异常并未被 catch 块捕获。
WIA.ICommonDialog wiaCommonDialog = new WIA.CommonDialog();
while (hatNochSeiten)
{
try
{
AktiverScanner.Geraet = AktiverScanner.GeraeteInfo.Connect();
WIA.Item geraetObjekt = null;
geraetObjekt = AktiverScanner.Geraet.Items[1];
geraetObjekt.Properties["Bits Per Pixel"].set_Value(1);
geraetObjekt.Properties["Horizontal Resolution"].set_Value(300);
geraetObjekt.Properties["Vertical Resolution"].set_Value(300);
WIA.ImageFile scanDatei = (ImageFile)wiaCommonDialog.ShowTransfer(geraetObjekt, ScannerModel.wiaFormatJPEG, false);
scanDatei.SaveFile(@"C:\scan_" + System.DateTime.Now.ToString("yyyyMMdd-HHmmss") + "_Seite" + seiten.ToString("000") + ".jpg");
Marshal.ReleaseComObject(scanDatei);
var status = (int)AktiverScanner.Geraet.Properties["Document Handling Status"].get_Value();
hatNochSeiten = (status & AktiverScanner.Eigenschaftlesen(3087)) > 0;
geraetObjekt = null;
scanDatei = null;
seiten++;
}
catch (System.Runtime.InteropServices.COMException comEx)
{
System.Diagnostics.Debugger.Break();
}
catch (Exception ex)
{
System.Diagnostics.Debugger.Break();
}
调试器因这个错误而中断,因为扫描器仍然很忙,但应该从第二个 catch 块中捕获异常。
Visual Studio 显示 "Exception Thrown" (Ausgelöste Ausnahme) 对话框,当:
- 抛出未处理的异常
- 您在 "Exception Settings" 中为某些异常类型启用了 "Break When Thrown",其中一种异常类型是抛出
在后一种情况下,它不会阻止异常被 catch
块正确捕获。当您继续调试时(通常按 F5
或 F10
),程序执行将正确地跳转到适当处理 catch
块的开头。如果您不希望此异常类型再次出现此对话框,请取消选中 "Break when this exception type is thrown" (Bei Auslösen dieses Ausnahmetyps unterbrechen) 选项或取消选中 "System.Runtime.InteropServices.COMException" in 异常设置 window(菜单 -> 调试 -> Windows -> 异常设置)。
如果仍然没有捕获到异常并且有适当的catch
块,另一个原因可能是执行的代码与实际源代码不匹配。