我的程序在try / catch块中生成System.ComponentModel.Win32Exception,并且没有捕获到异常。代码非常简单:
try
{
lAFE.MinimumSize = sz1; // lAFE=Label, sz1 = Size
}
catch (Exception ex)
{
MessageBox.Show("afe: " + ex.Message);
}
程序运行这个代码块数百次没有问题然后突然它产生这个异常并且它没有被捕获。
什么可能导致像这样的异常被捕获。
此应用程序使用大量内存,当内存使用量达到约305KB时,总会发生异常。
非常感谢任何建议。
答案 0 :(得分:4)
因为Win32异常不是从.NET Exception类派生的。试试:
try
{
}
catch (Exception ex)
{
// .NET exception
}
catch
{
// native exception
}
您可以阅读此article:
处理Exception的catch块捕获所有公共语言 规范(CLS)兼容的例外。但是,它没有抓住 符合非CLS的异常。符合非CLS的例外情况可以是 从本机代码或由生成的托管代码抛出 Microsoft中间语言(MSIL)汇编程序。注意C# 和Visual Basic编译器不允许非CLS兼容的异常 抛出,Visual Basic不会捕获非CLS兼容 例外。如果catch块的意图是处理所有 异常,使用以下常规catch块语法。
C#:catch {}
答案 1 :(得分:0)
此代码是否在另一个线程/任务/异步方法中运行?
以下是某些类型的例外情况的例子,这些例外情况可以"不能"#34;被抓住了。
UnmanagedFunctionPointer causes stackoverflow when using .NET 4.0, 3.5 works
在这种情况下,堆栈溢出异常会导致异常处理崩溃,因此虽然在某些情况下它可能会被捕获,但在上面却没有。
您是否可以发布更多关于如何调用此方法的上下文?我会更新这个答案。