为什么我的例外没有被捕获?

时间:2012-07-09 14:32:25

标签: c# exception try-catch executionengineexception

我在调试时遇到问题我没有得到: 我正在使用kernel32.dll中的一个方法来获取Free RAM,但是它会抛出一个System.EngineExecutionException,我会抓住它,但调试器会在异常时停止并拒绝继续。 那么为什么没有抓住例外?

using System;
using System.Collections.Generic;
using System.Text;
using System.Management;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace StationController.Diagnose
{
public class Memorystatus
{
    public UInt32 Length;
    public UInt32 MemoryLoad;
    public UInt32 TotalPhys;
    public UInt32 AvailPhys;
    public UInt32 TotalPageFile;
    public UInt32 AvailPageFile;
    public UInt32 TotalVirtual;
    public UInt32 AvailVirtual;
}
class Test
{
    [DllImport("kernel32")]
    private static extern void GlobalMemoryStatus(ref Memorystatus buf);

    private static UInt32 GetFreeRAM()
    {
        try
        {
            Memorystatus MemStat=new Memorystatus();
            GlobalMemoryStatus(ref MemStat);
        }
        catch (System.ExecutionEngineException){ return 0; }
        catch (System.Exception) { return 0; }
        catch { return 0; } //I know kind of redundant
        return sMemStat.AvailPhys;
    }
}
}

工具 - >选项 - >“当异常在AppDomain之外时停止”未选中

我已经修复了异常的原因,Memorystatus必须是一个结构而不是类,这个问题是关于try-catch行为

1 个答案:

答案 0 :(得分:3)

System.EngineExecutionException是一个内部.NET错误,据我所知,当出现严重错误时,CLR会抛出该错误。

可以收藏吗?我不这么认为 - 因为我认为此级别的异常会阻止您的代码继续执行

http://social.msdn.microsoft.com/Forums/eu/clr/thread/4425321d-b291-4a2a-899c-8266f16e26d8

这可能是因为搞乱了非托管内存 - 例如你的kernel32.dll调用

http://msdn.microsoft.com/en-us/library/system.executionengineexception.aspx