我正在尝试构建一个多线程游戏,其中我有一个单独的线程用于在不是主线程的表单上绘画。这给我们带来了线程安全技术,我已经阅读了很多文章,但我不确定我是否正确理解了它。
我的问题是我有一个结构,其中每个数据对象都在表单上自行绘制,所以我不知道如何实现它。
这是我工作的单线程代码的片段:
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:参数无效
请您指出该代码中的错误