我遇到了一些问题......代码如下:
delegate void SetCanvasDelegate(PictureBox canvas);
public void SetCanvas(PictureBox canvas)
{
if (this.canvas.InvokeRequired)
this.canvas.Invoke(new SetCanvasDelegate(SetCanvas), new object[] { canvas });
else
this.canvas = canvas;
}
void bw_DoWork(object sender, DoWorkEventArgs e)
{
while (true)
{
PictureBox canvas = new PictureBox();
Graphics g = Graphics.FromHwnd(canvas.Handle);
RadarElement player = new RadarElement(new Point(150, 150), RadarElementType.Player);
List<Enemy> enemies = new List<Enemy>();
ores.Add(new Enemy(new Point(100, 100)));
g.DrawLine(new Pen(Color.Black), new Point(0, 0), new Point(100, 100));
if (trackEnemies.Checked)
foreach (Enemy e in enemies)
g.DrawImage(Image.FromFile("enemy.png"), e.Position);
SetCanvas(canvas);
Thread.Sleep(500);
}
}
this.canvas是我Form1中的PictureBox。
所有这些都在我的Form1类中...但是我的表单中的pictureBox没有更新为在代码中显示enemy.png。有什么问题,如何纠正呢?
答案 0 :(得分:1)
你有Invalidate
图片框吗?
答案 1 :(得分:1)
您似乎正在尝试将表单的PictureBox替换为在bw_DoWork
方法中创建的PictureBox。这不会按照你期望的方式工作。您需要在图像对象上进行绘画,然后将绘制的图像粘贴到表单的图片框中。如果仍然没有显示,请使用Daren Thomas建议的Invalidate。
你可能需要按照
的方式做点什么Bitmap canvas = new Bitmap(width, height);
using(Graphics g = Graphics.FromImage(canvas))
{
// paint here
}
SetCanvas(canvas);
然后相应地修改您的SetCanvas
方法以接受图片而不是PictureBox
。