デバッグ中に問題が発生しましたが、取得できません。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の動作に関するものです。