我正在嘗試構建一個多線程的遊戲,其中有一個單獨的線程用於繪製不是主線程的窗體。這讓我們看到了許多關於線程安全的技術,但我並不確定我是否正確。由一個單獨的線程在窗體上繪製
我的問題是,我有一個結構,每個數據對象在窗體上自己繪製它,所以我沒有弄清楚如何實現它。
這是我工作的單線程代碼片段:
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:參數無效
會您請指向該代碼中的錯誤
那麼,你想在這個代碼中插入線程? – Tudor
@Tudor回答你的問題,請參閱編輯段落 –
哪一行會拋出'ArgumentException'? – Tudor