首页 > 解决方案 > PInvoke FatalExecutionEngineError 在不同的线程中

问题描述

我的代码工作正常,但 5-10 分钟后,我收到以下错误;

托管调试助手'FatalExecutionEngineError':'运行时遇到致命错误。错误地址位于线程 0x5d0c 上的 0x641ad419。错误代码为 0xc0000005。此错误可能是 CLR 中的错​​误或用户代码的不安全或不可验证部分中的错误。此错误的常见来源包括 COM 互操作或 PInvoke 的用户封送错误,这可能会损坏堆栈。

从不同的线程调用;

InvokeUtil.getInstance.Calculate(localVal);

我的代码;

public class InvokeUntil
{
    private IntPtr m_object = IntPtr.Zero;
    private static InvokeUntil Self;

    private InvokeUntil()
    {
        this.m_object = InvokeUntil.DllCreateInstance();
    }

    [DllImport("xDll")]
    private static extern IntPtr DllCreateInstance();

    [DllImport("xDll")]
    private static extern void DllDisposeInstance(IntPtr CSObject);

    [DllImport("xDll")]
    private static extern void DllCalculate(IntPtr pCSObject, byte[] pCurrentData, uint[] pResult);


    public static InvokeUntil getInstance
    {
        get
        {
            if (InvokeUntil.Self == null)
                InvokeUntil.Self = new InvokeUntil();
            return InvokeUntil.Self;
        }
    }

    public void Calculate(uint[] EffVal)
    {
        InvokeUntil.DllCalculate(m_object, Data.MyData, EffVal);
    }
}

标签: c#

解决方案


推荐阅读