C# 10秒后发生未处理的异常错误,原因是什么?

C# 10秒后发生未处理的异常错误,原因是什么?,c#,error-handling,xna,runtime-error,C#,Error Handling,Xna,Runtime Error,在我的游戏运行了10-15秒后,我收到了以下警告/错误消息,甚至在没有与游戏交互时也会发生这种情况: System.Drawing.dll中发生类型为“System.ComponentModel.Win32Exception”的未处理异常 其他信息:操作已成功完成 我想知道是否需要调用一个Dispose()方法来删除那些在加载时没有使用的对象,即使它们已经从游戏世界中删除了 我将所有对象存储为列表(如下所示) 我现在一直被这个错误困扰着,无法找到一个解决方案来阻止它的发生。如前所述,它发生在游戏

在我的游戏运行了10-15秒后,我收到了以下警告/错误消息,甚至在没有与游戏交互时也会发生这种情况:

System.Drawing.dll中发生类型为“System.ComponentModel.Win32Exception”的未处理异常


其他信息:操作已成功完成

我想知道是否需要调用一个
Dispose()
方法来删除那些在加载时没有使用的对象,即使它们已经从游戏世界中删除了

我将所有对象存储为列表(如下所示)

我现在一直被这个错误困扰着,无法找到一个解决方案来阻止它的发生。如前所述,它发生在游戏运行10-15秒之后,因此在修复此错误之前,我无法继续使用任何其他功能


我感谢您的帮助和提前感谢。

我发现了一些有趣的信息,看起来try catch对您没有任何帮助,因为它可能是您要求c#生成的图形量。必须降低显示的图形质量或减少代码中需要图形的对象数量,请参见:

似乎你不是唯一一个有这个问题的人

人们通常在拥有相同的版本之前对图形有很高的要求,优化代码是你所需要的,设法减少游戏所需的内存不是一个简单的任务。勇气,我的朋友


附:从dispose()开始将是一个好主意;)

“附加信息:操作已成功完成”这看起来并不是什么问题,它实际上是在向您抛出一个错误,只是为了告诉您一切正常。你的游戏冻结了,因为你的代码中没有错误处理。@AntoinePelletier啊,好的,我明白了!为了添加错误处理,我需要添加什么?他。。。好。。。你可能知道什么是试捕,但我不认为这是最好的做法,我个人会在事情似乎出错的地方放一个试捕声明,但这不是你能做的最好的。最好的方法是,你有一个完整的类,捕捉每一个错误,并对它们做出特殊的反应。我会尽力为你找到一些东西。@AntoinePelletier是的,我喜欢尝试捕获(将它们放在代码周围并登录到某个地方)。如果你能找到一些很棒的东西!我一直在尝试在我的Items类中的代码中使用Dispose(),其中包含对象列表,但我似乎无法使其正常工作。请记住,始终创建尽可能少的对象,并在这些对象无效时立即将其删除。请记住,您的问题与图形有关,因此请尽量减少生成的图形量。如果你的游戏真的需要大量的图形,那么你必须学习GPU。。。如果你可以一次销毁整个表,你可能需要一个接一个地处理你的对象,但是在之前,请尝试.Delete()。我当前在帖子中显示的列表是我在游戏中需要的最少的对象。假设我有一个碰撞方法,我将在碰撞方法中调用Delete(),以便销毁该对象?如果该对象不再有用,或者应该在冲突后删除,那么是的,立即删除它我有
Player=CheckCollisionAgainst();如果(player!=null)
则Dispose(),但错误似乎仍在显示。我需要包括一些错误处理吗?
class Items
{
    public static List<Obj> objList = new List<Obj>();

    public static void Initialize()
    {
        //The Player
        objList.Add(new Player(new Vector2(50, 50)));
        //The Enemies
        objList.Add(new Enemy(new Vector2(500, 400)));
        objList.Add(new Enemy(new Vector2(600, 200)));
        //The Collectibles 
        objList.Add(new BlueBall(new Vector2(300, 400)));
        objList.Add(new GreenBall(new Vector2(350, 100)));
        objList.Add(new OrangeBall(new Vector2(65000, 250)));
        objList.Add(new PinkBall(new Vector2(100, 400)));
        objList.Add(new RedBall(new Vector2(600, 400)));
        objList.Add(new YellowBall(new Vector2(500, 250)));

    }
 //Collision with enemy
            Enemy enemy = CheckCollisionAgainst<Enemy>();
            if (enemy != null)
            {
                gameOver.Play();
                alive = false;
            }