XNA Texture2D Dispose() + ObjectDisposedException

Я очень новичок в XNA framework. Я пишу пример приложения в XNA для Windows Phone 7.

на данный момент столкнулся с проблемой.

В примере я загружаю Texture2D, размещаю его в следующей строке и присваиваю ему значение null. Я снова загружаю то же изображение в ту же переменную-член. Но при розыгрыше я получаю ObjectDisposedException.

Если я удалю вызов dispose, он не даст никаких исключений.

Пожалуйста, помогите мне решить эту проблему.

Образец:

Texture2D texture = null;
 protected override void LoadContent()
 {
      texture = Content.Load<Texture2D>("Back");
      texture .Dispose();
      texture = null;

      texture = Content.Load<Texture2D>("Back");
}


protected override void Draw(GameTime gameTime)
{
      GraphicsDevice.Clear(Color.CornflowerBlue);

      spriteBatch.Begin();
      spriteBatch.Draw(texture , new Vector2(0, 0), Color.White);

      spriteBatch.End();

       base.Draw(gameTime);
}

person Umesha MS    schedule 20.07.2010    source источник


Ответы (1)


ContentManager, который вы используете, автоматически управляет временем жизни ресурсов. Он кэширует текстуру «Назад» после первого вызова и возвращает тот же экземпляр при втором запросе. К сожалению, вы попросили Текстуру избавиться от себя, чтобы она больше не использовалась.

Вы можете использовать Content.Unload для удаления текстуры из памяти.

person Technium    schedule 22.07.2010
comment
Имейте в виду, что Content.Unload выгружает все ресурсы в контент-менеджере. Вы не можете использовать его для выгрузки определенного ресурса. - person Dave Carlile; 12.08.2010