System.TypeInitializationException抽象类首次访问

时间:2014-11-18 21:11:28

标签: c#

我真的被这个愚蠢的事情所困扰。

abstract class Texture
{
    static Dictionary<string, int> textures = new Dictionary<string, int>();
    public static Dictionary<string, int> Textures { get { return textures; } set { textures = value; } }
    public static int GetTexture(string name)
    {
        return Texture.Textures[name];
    }
    public static void LoadTexture(string name, string filename)
    {
        int id = GL.GenTexture();
        GL.BindTexture(TextureTarget.Texture2D, id);

        Bitmap bmp = new Bitmap(filename);
        BitmapData bmp_data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

        GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, bmp_data.Width, bmp_data.Height, 0,
            OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, bmp_data.Scan0);

        bmp.UnlockBits(bmp_data);

        GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
        GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
        Textures.Add(name, id);
    } 
    static Texture()
    {
        LoadTexture("some_name", "some_name.jpg");
    }
}

当我尝试从Dictionary获取值时,它会导致错误。访问构建中的某个位置:

 textureObjects.Add(name, Texture.GetTexture(name)); 

错误说我接受了禁止的memmory(受保护)。但我实际上并没有这样做......

1 个答案:

答案 0 :(得分:1)

该异常通常意味着在类的静态构造函数(或其中一个静态字段初始值设定项)中抛出错误。我的猜测是在调用GL.GenTexture()时抛出异常。检查异常的InnerException属性以查看更多详细信息。

修改

并不是说您添加了更多代码我发现有几个地方可能会抛出异常。答案仍然是确定LoadTexture中抛出异常的位置并修复它。