C# PictureBox 刷新问题[急]

首先:每次刷新图片的时候都要对一个图片进行一些运算,这大概需要零点几秒的时间.然后:我想要在鼠标移动的事件里对PictureBox进行刷新.现在的问题是:在鼠标移动的过程... 首先:每次刷新图片的时候都要对一个图片进行一些运算,这大概需要零点几秒的时间.
然后:我想要在鼠标移动的事件里对PictureBox进行刷新.

现在的问题是:在鼠标移动的过程中图片刷新得非常慢,远远比对图片进行运算时的时间长.基本上如果鼠标不停止移动的话,图片就不会刷新,但是鼠标一停图片就立刻刷新了.

非常不理解这个状况是怎么回事.希望高人解释.
代码大概是这样的:
override Refresh()
{ this.Image = anotherPicture();
Thread.Sleep(400);
base.Refresh();
}

OnMouseMove( sender, e )
{ Refresh();
}
在我的代码里用的不是Thread.Sleep.我在这儿写这个函数是为了说明前面那个anotherPicture()函数要用的时间可能很长.

是不是每次这个事件被触发的时候,这个函数都是在同一个线程里被调用的?所以会出现上一个函数还没有运行完毕下一次事件触发不会有动作?可是就算这样,在第一个0.4秒过去之后图片也应该刷新一下啊.

实际情况是,我不停的移动鼠标移动了很久,但是只有在停止移动的瞬间图片才会刷新上去.得到的是所有anotherPicture()最终的结果.
展开
 我来答
FantasyChump
2009-05-05 · TA获得超过3288个赞
知道大有可为答主
回答量:2127
采纳率:0%
帮助的人:2235万
展开全部
0.4S的计算时间已经很长了,你要知道鼠标移动事件触发是非常频繁的,可能你看到的只有一小段距离但是触发已经超过几十次了(每个像素至少一次),就算是每个像素1次吧,移动10个像素时Thread.Sleep已经占掉了4秒钟的时间了,而你要知道这鼠标移动的仅是10个像素,大多数显示器上这是2-3毫米的长度你可以衡量一下你鼠标移动的时间和Thread被你暂停的时间。乐观估计一下你移动鼠标只有零点几秒但线程却被你暂停了4秒,你想想它有足够的时间来为你刷新图像吗?
-------------------补充---------------------
你的猜测是正确的。事件是放在主线程里面执行的,和绘制界面是同一个线程,所以它忙的时候,界面是不可能重画的。
解决方案是:多线程。不过照你的需要来看,基本上要实时重绘是不可能的~
Deeroad
2009-05-05 · 超过19用户采纳过TA的回答
知道答主
回答量:87
采纳率:0%
帮助的人:61.3万
展开全部
你这样当然不行啊!你的Thread.Sleep(400); 是在主线程里,到这里整个主线程都挂起来了!解决方法是使用多线程。当鼠标移动时,新建一个线程用于刷新图片,这样就不会停顿了哦。
override Refresh()
{
Thread rf= new Thread(RefreshImage);
rf.Start();
}

void RefreshImage()
{
//刷新图片代码

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
王_牌
2009-05-05 · TA获得超过292个赞
知道答主
回答量:302
采纳率:0%
帮助的人:0
展开全部
标记下!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友dc91b32
2009-05-05 · TA获得超过5650个赞
知道大有可为答主
回答量:5653
采纳率:0%
帮助的人:0
展开全部
不明白你要实现个什么功能,你的设计有问题,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式