0.4S的计算时间已经很长了,你要知道鼠标移动事件触发是非常频繁的,可能你看到的只有一小段距离但是触发已经超过几十次了(每个像素至少一次),就算是每个像素1次吧,移动10个像素时Thread.Sleep已经占掉了4秒钟的时间了,而你要知道这鼠标移动的仅是10个像素,大多数显示器上这是2-3毫米的长度你可以衡量一下你鼠标移动的时间和Thread被你暂停的时间。乐观估计一下你移动鼠标只有零点几秒但线程却被你暂停了4秒,你想想它有足够的时间来为你刷新图像吗?
-------------------补充---------------------
你的猜测是正确的。事件是放在主线程里面执行的,和绘制界面是同一个线程,所以它忙的时候,界面是不可能重画的。
解决方案是:多线程。不过照你的需要来看,基本上要实时重绘是不可能的~
你这样当然不行啊!你的Thread.Sleep(400); 是在主线程里,到这里整个主线程都挂起来了!解决方法是使用多线程。当鼠标移动时,新建一个线程用于刷新图片,这样就不会停顿了哦。
override Refresh()
{
Thread rf= new Thread(RefreshImage);
rf.Start();
}
void RefreshImage()
{
//刷新图片代码
}
标记下!
不明白你要实现个什么功能,你的设计有问题,