C# winform程序,UI界面锁死。如何处理?

程序“未响应”。有时候是程序未响应,有时候是什么都动不了(死机)。Timer中的方法是在主线程执行的,如果执行时间长,会锁UI界面,表现为鼠标不可控,任务管理器程序显示“... 程序“未响应”。有时候是程序未响应,有时候是什么都动不了(死机)。
Timer中的方法是在主线程执行的,如果执行时间长,会锁UI界面,表现为鼠标不可控,任务管理器程序显示“未响应”。
处理方法:1.优化Timer控件中Tick事件中的方法,减少方法执行时间
2.加大Timer的Interval,如果要求不高,1000毫秒以上就好。这个Interval最好不要低于200
3.多线程处理,将消耗大的业务放在子线程中,这样UI不会锁死。请问还有别的方法处理吗?
请问在Tick事件中开始加入时钟禁止,当事件代码执行完再使能时钟,可否?
展开
 我来答
朝闻道_Fate
2014-05-17
知道答主
回答量:8
采纳率:0%
帮助的人:4.6万
展开全部
Winform 程序,要想保证 UI 不卡死,只有将长耗时任务放到非UI线程运行这一个办法。而且现在早已进入多核时代,软件上多线程设计的思想要是要有的,不然的话,CPU的性能是不能充分利用的。

楼主说的方法1与2,如其他回答所说一样,治标不治本。关于多线程编程,楼主可以参考下 Task 。这个类库在线程上又多封装了一层,让开发者可以不直接接触线程来实现并行运算。用 Task 来处理楼主的问题用不了几行代码的。
syht2000
高粉答主

2014-05-16 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部
1和2按你的情况都是没用的,如果你所说的那个执行是个循环的话,可以在循环中加一行Application.DoEvents() 这个可以让UI不卡死,但加入这个会极大的降低你的循环执行效率。所以一般情况下还是要用多线程的。
追问
加Application.DoEvents(),几分钟后就卡死了。
不加反而可以使用几个小时。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a308595369
2014-05-16 · TA获得超过610个赞
知道小有建树答主
回答量:601
采纳率:0%
帮助的人:537万
展开全部
不要用定时器 开个线程 后天处理数据 然后UI填充 等动作。

你以上设置 定时器 1秒执行一次 无限在触发。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
主得存c
2014-05-16 · TA获得超过1033个赞
知道小有建树答主
回答量:982
采纳率:86%
帮助的人:319万
展开全部
一般情况都是放在子线程中运行。这样既保证效率,方便管理
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
战地密报
2014-05-16 · TA获得超过211个赞
知道小有建树答主
回答量:424
采纳率:0%
帮助的人:157万
展开全部
没有没有没有没有
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式