我只是在调试时遇到了一个我没有得到的问题:我正在使用 kernel32.dll 中的方法来获取可用 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 行为