关于C#的Form窗体实时刷新的问题

thuvincenthan 2014-10-12 11:45:35
我用C#编了一个Form窗体程序,在添加了单击响应事件后,如
private void pictureBox_Click(object sender, EventArgs e)
窗体总是在该函数执行完才刷新。
而我需要的是在函数执行的过程中刷新窗体,比如pictureBox控件的图片更换后立即显示,该怎么做?

单击响应事件如下:
private void pictureBox_Click(object sender, EventArgs e)

{
......
Blocks[i, j].Image = Image.FromFile("......."); //Blocks是pictureBox控件数组
......
}
Blocks[i, j]的图片总是在函数执行完显示,现在希望图片更换后立即显示

本人菜鸟一枚,还望各位高手不吝赐教!
...全文
1062 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2014-10-13
  • 打赏
  • 举报
回复
程序很简单,所以都放到主线程里 这什么设计思路啊 用单线程还是多线程,跟程序简单不简单有关系?? 要不要多线程,是要看你的操作是否耗时,而不是看逻辑是否简单 只能说,你的逻辑设计的太简单,而不是程序简单
GIS人生 2014-10-13
  • 打赏
  • 举报
回复
看不懂啊,楼主解决了吗,分享一下
xian_wwq 2014-10-13
  • 打赏
  • 举报
回复
Application.DoEvents();无效, 是因为Blocks[i, j].Image = Image.FromFile("......."); 耗时太长 建议另起线程, 具体说来就是把耗时的加载操作放在线程中,加载完成后 通过委托的方式来更新UI 但是lz希望的一更新就显示估计还是有问题 因为Blocks[i, j].Image = Image.FromFile("......."); 耗时长 放在那里都需要时间, 只不过放在线程中,能保证form窗体不会出现无响应的问题
thuvincenthan 2014-10-12
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
Blocks[i, j].Image = Image.FromFile("......."); Application.DoEvents();
1楼的方法我试过了,不行
threenewbee 2014-10-12
  • 打赏
  • 举报
回复
Blocks[i, j].Image = Image.FromFile("......."); Application.DoEvents();
孤独de猫 2014-10-12
  • 打赏
  • 举报
回复
Picturebox 刷的很慢,是因为主进程的被这个for循环给卡住了。无法处理Paint消息。可以使用sleep(),在每个Picturebox Load后,然后让其休息下。
thuvincenthan 2014-10-12
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
“图片更换”就应该这样写。 你应该考虑的是,这个方法中有没有什么东西不需要在主线程中执行。
程序很简单,都在主线程中执行
  • 打赏
  • 举报
回复
“图片更换”就应该这样写。 你应该考虑的是,这个方法中有没有什么东西不需要在主线程中执行。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧