メインスレッドではないフォームにペイントするための別のスレッドがあるマルチスレッドゲームを構築しようとしています。これは、私が多くの記事を読んだことのあるスレッドセーフな技術につながりますが、それが正しく理解できたかどうかはよくわかりません。
私の問題は、すべてのデータオブジェクトがフォーム上でそれ自体をペイントしている構造を持っているため、それを実装する方法がわかりませんでした.
これは、私の作業モノスレッド コードのスニペットです。
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);
}
}
}
別のスレッドで図面を分離する方法を学ぶのに役立つヒントや良い記事へのリンクを教えてください。
[編集]
意図したことをなんとか実装できました。これが私がそれをコーディングした方法です
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);
}
}
しかし、私は ArgumentException を受け取りました: パラメータが無効です
そのコードのエラーを指摘してください