[
登录
|
注册
]
反馈问题或提出建议
社区首页
新 闻
小 组
博 问
闪 存
空 间
好 友
网站首页
WinForms
/
程序失去响应
浏览:1244
2008-03-13 16:33
来自
沙加
:
俺刚接触做WinForm, 以前是做Web的,问题是这样,现在有一个功能,点界面上的一个按钮执行一项功能,但是这个操作需要较长的时间,我现在未作任何处理,这时候界面上就跟死了似的. 半天无响应,但是程序实际上是在工作的. 应该有解决办法吧? 我想是不是另开一个线程去执行这个任务呢(就不会造成界面定住??), 或者使用异步的方式,并且我希望能够了解一些执的进度,比如加一个进度条, 如何反映到界面上来??
楼主
4个月前
分享
:
原来windows有个系统调用可以让界面保持控制,最简单。
另外一个办法就是开线程。
进度条是个简单问题。
回复
1楼
4个月前
沙加
:
@分享
进度条我想的是把任务操作封装到一个类里面, 然后公开一个事件, 把当前进度或者相关数据放到事件参数里面,界面上定阅这个事件后再把进度呈现出来,这样做可以吗?
回复
2楼
4个月前
被偷De贼
:
Application.DoEvents();
回复
3楼
4个月前
G yc {Son of VB}
:
Application.DoEvents();
是一个不错的方法,
还可使用 多线程或者异步
使用多线程跟新界面,需要使用Invoke才可以
使用异步,更新界面我没有试过
.NET 2.0中,有个backgroundwork 控件,可以实现多线程,和更新(需要配置)
回复
4楼
4个月前
BirdsHover
:
开多线程,用委托通知界面
回复
5楼
4个月前
Risen
:
BackgroundWorker 是.net 2.0新增控件,对于快速实现异步调用非常有用,建议详查MSDN中的BackgroundWorker控件。
回复
6楼
3个月前
jisen
:
一般解决方法都是创建委托,然后在委托方法A里面执行任务,然后在A中启用刷新进度条,但是要注意跨线程操作控件的问题,这个还要用委托来解决。
回复
7楼
1个月前
念念红尘
:
可以通过多线程来解决这个问题,新开一个线程来执行比较费时间的操作。因为有2个线程,系统会进行调度,线程轮流获得CPU时间,这样就不会出现界面假死的现象。
一般有3种方法:
1:Thread新建一个线程,可以自己控制
2:用线程池,交给系统控制
3:利用异步(异步实际是多线程的一种应用,他实际是使用了线程池)
关于显示进度,可以使用事件。
另外的方法是在异步的线程中使用一个回调方法,这个回调方法是更新界面进度的。如果要实时显示,我觉得可以使用Therd.Timer,阁段时间执行一次回调函数,也就是刷新。
回复
8楼
你还不是小组成员,
加入小组
以后才能发布新主题!
有不合适内容,建议去除
>
返回“WinForms”
其他话题
winform的显示效率,难道就这么垃圾?
(沈阳阿瑞)
为什么winForm的技术资料比WebForm的少的多?
(xiaof2000)
一个应用程序访问不同的数据库?
(随风逝去)
winform当数据库更新时,更新其界面
(随风逝去)
WinForms应用程序开发还有希望吗?
(快乐老鼠Jerry)
哥们刚刚开始做WinForms,哈哈,多多指教,以后常来啊。
(火星人.NET)
图灵&博客园&互动网有奖书评征集活动
(turingbook)
修改开始菜单的显示文本
(随风逝去)
程序失去响应
(沙加)
这个小组人气不太足啊。
(纶巾客)
询求像QQ一样可折叠面板控件
(陈欠扁)
常用的小型.NET编译工具
(kun.zhang)
1
13901