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