Device Reset With Loading

This code handles a device reset event, this occurs when your GPU flushes its ram, many events can cause this, a display cable becomes unplugged, or the lockscreen is activated as some examples, game data such as player stats etc, remain but visual assets are lost during this event, this code checks for that event and reloads content, note the implementation of drawing assets when they are not null is implemented here as well.

Thanks again to Mutsi for mentioning `need to run the content builder pipeline for your textures/effects as well otherwise you just end up loading the same xnb`.

It should be mentioned however checking for Device Reset issues is mostly not an issue on modern systems and is usually an edge case.

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

public class Game1 : Game
{
    GraphicsDeviceManager _graphics;
    SpriteBatch _spriteBatch;

    // Textures
    Texture2D backgroundTexture;
    Texture2D characterTexture;
    Texture2D enemyTexture;

    public Game1()
    {
        _graphics = new GraphicsDeviceManager(this);
        Content.RootDirectory = "Content";

        // Subscribe to the DeviceReset event
        _graphics.DeviceReset += Graphics_DeviceReset;
    }

    protected override void LoadContent()
    {
        _spriteBatch = new SpriteBatch(GraphicsDevice);

        // Call the method to load all textures
        LoadContentTextures();
    }

    private void LoadContentTextures()
    {
        // Load all textures here
        backgroundTexture = Content.Load<Texture2D>("background");
        characterTexture = Content.Load<Texture2D>("character");
        enemyTexture = Content.Load<Texture2D>("enemy");
    }

    private void Graphics_DeviceReset(object sender, System.EventArgs e)
    {
        // Reload textures when the device is reset
        LoadContentTextures();
    }

    protected override void Update(GameTime gameTime)
    {
        // TODO: Add your update logic here

        base.Update(gameTime);
    }

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

        _spriteBatch.Begin();

        // Draw background if loaded
        if (backgroundTexture != null)
        {
            _spriteBatch.Draw(backgroundTexture, Vector2.Zero, Color.White);
        }

        // Draw character if loaded
        if (characterTexture != null)
        {
            _spriteBatch.Draw(characterTexture, new Vector2(100, 100), Color.White);
        }

        // Draw enemy if loaded
        if (enemyTexture != null)
        {
            _spriteBatch.Draw(enemyTexture, new Vector2(200, 100), Color.White);
        }

        _spriteBatch.End();

        base.Draw(gameTime);
    }
}