Narysuj na formularzu osobnym wątkiem

Próbuję zbudować grę wielowątkową, w której mam osobny wątek do malowania na formularzu, który nie jest głównym wątkiem. to prowadzi nas do bezpiecznych wątków, o których czytałem wiele artykułów, ale nie jestem pewien, czy poprawnie je dostałem.

moim problemem jest to, że mam strukturę, w której każdy obiekt danych maluje go samodzielnie w formularzu, więc nie wymyśliłem, jak go wdrożyć.

to fragment mojego działającego kodu jedno wątkowego:

public partial class Form1 : Form
{
    GameEngine Engine;
    public Form1()
    {
        InitializeComponent();
        Engine = new GameEngine();
    }
    protected override void OnPaint(PaintEventArgs e)
    {
        Engine.Draw(e.Graphics);
    }

}

class GameEngine
{

    Maze Map;
    List<Player> Players;

    public void Draw(Graphics graphics)
    {
            Map.Draw(graphics);
            foreach (var p in Players)
            {
                p.Draw(graphics);
            }
    }

}

więc proszę, czy ktoś może dać mi wskazówkę lub link do dobrego artykułu, który pomoże mi dowiedzieć się, jak oddzielić rysunek na innym wątku ?.

[Edytować]

Udało mi się wdrożyć to, co zamierzałem zrobić i tak to zakodowałem

    protected override void OnPaint(PaintEventArgs e)
    {
        formGraphics = e.Graphics;
        DisplayThread = new Thread(new ThreadStart(Draw));
        DisplayThread.Start();
    }

    private void Draw()
    {
        if (this.InvokeRequired)
        {
            this.Invoke(new DrawDelegate(this.Draw));
        }
        else
        {
            Engine.Draw(formGraphics);
        }
    }

ale dostałem ArgumentException: Parametr jest nieprawidłowy

Czy mógłbyś wskazać błąd w tym kodzie

questionAnswers(1)

yourAnswerToTheQuestion