Почему мое исключение не перехвачено?

У меня просто возникла проблема при отладке, которую я не получаю: я использую метод из kernel32.dll для получения свободной оперативной памяти, однако он выдает исключение 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;
    }
}
}

Сервис-> Параметры ->"Остановить, когда исключение находится вне домена приложения", не отмечено

Я уже исправил причину исключения, Memorystatus должен быть структурой, а не классом, этот вопрос касается поведения try-catch

1 ответ

Решение

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

Другие вопросы по тегам