你对方法使用了锁,但是你对整个窗口使用了锁了吗,或者整个窗口方法里面的东西都锁住了吗,你一点点跟过去啊,看最外面咋看
谢谢 ,我在代码中用了两个 系统的timer, 不是winfrom控件, 所以一步一步调试不出来,一直子啊两个定时器中跳来跳去的
@春哥/: 反正多跟一下至少对应准点才能问问题,看楼下和你交流了那么多,也出不来,哈哈
@代码小兵的成长: 恩恩,我在看看,梳理下问题再请教
看中文,你调用 GetHdc 方法后没有 ReleaseHdc 就使用了 Graphics 对象。
没有用这个呢,
@春哥/: 你有使用 Graphics 对象吗?
@Launcher: 用了的
@春哥/: 你的 Graphics 对象是如何创建的?
使用两个Graphics画图, 分别给两个Bitmap画图
@Launcher: Graphics.FromIamge(newBmp);
@春哥/: 我问你的是你的 Graphics 对象是如何创建的?
@Launcher: Graphics g= Graphics.FromIamge(newBmp); 通过Bitmap对象来创建的
@春哥/: var g = Graphics.FromIamge(newBmp);
使用到 g 的地方 lock 起来。
@Launcher:恩,应该都 锁了,我在西看看
@Launcher: 为什么要用var
public void DrawGameObject(Graphics g)
{
lock (lockObj)
{
// g.Clear(Color.Red);
}
lock (lockObj)
{
this.BG.Draw(g);
}
lock (lockObj)
{
for (int i = 0; i < listEmemy.Count; i++)
{
listEmemy[i].Draw(g);
}
}
lock (lockObj)
{
//this.Sp.Draw(g);
}
都锁了
@春哥/: 完全可以锁一次哇,把几段代码放在一起呢~
@幻天芒: 哦,谢谢,我试试,对锁用的不太多了,
@春哥/: 你就贴了一个方法,看不出你的 g 是不是还在别处使用了,还有你的 this.BG ,listEmemy[i],this.Sp 这都是啥类型的对象?
@春哥/: 我也用得不多,哈哈。
@Launcher: 你看图片啊,BG :是 游戏背景 、 ListEnemy是敌人 , 后台代码是没问题的,就是前台 只有这个地方用了画笔 Graphics
@春哥/: 对不起,我愚笨,看不懂图片,只看得懂代码。你还是把异常的 StackTrace 给贴出来吧!我们一步到位的定位到出错的代码。
释放了再用