首页 新闻 赞助 找找看

C# Winform应用程序假死,资源管理器显示running ,但是界面无法拖动

0
[待解决问题]

大家好,
自己开发的winform 桌面应用程序随机会出现界面假死的情况,希望园友可以给点建议,查找方向
现象如下:
1.运行一段时间后,界面出现假死,无法拖动
2.查看资源管理器显示running 状态,并不是未响应状态
3.CPU使用率也不是很高15左右
4.内存使用20M左右,我的电脑是4核处理器的

之前一直觉得在更新控件时卡住主线程了,把所有界面控件更新都添加了事件触发委托,可是过一段时间还是会有假死出现,关键在几十个电脑上跑,偶尔会有几台出现假死,求助可能会是什么原因

万事如意-的主页 万事如意- | 初学一级 | 园豆:93
提问于:2018-07-14 22:43
< >
分享
所有回答(7)
0

试试 async/await

dudu | 园豆:31075 (高人七级) | 2018-07-14 23:45

多线程处理应该效果差不多,问题是我这种界面假死,但是资源管理器显示运行,这个到底是线程卡死导致的,还是更新控件卡死的,我不太清楚,求助

支持(0) 反对(0) 万事如意- | 园豆:93 (初学一级) | 2018-07-15 10:44
0

事件委托不能解决界面假死的问题。但单线程下可以用Application.DoEvents() 试试,让系统有时间更新界面。比较长时间的处理应建议用多线程处理,虽然多线程更新界面麻烦些。

大豆男生 | 园豆:608 (小虾三级) | 2018-07-15 10:39

@万事如意-: 长任务用多线程处理,界面不会假死, 线程处理任务时,界面可以随意拖动。

支持(0) 反对(0) 大豆男生 | 园豆:608 (小虾三级) | 2018-07-15 10:53

我的程序正常运行是没有问题的,就是过了几天后发现假死了不能拖动,但是实际上其他非UI线程还是在正常运行的,我现在不确定到底是线程卡死导致的问题还是控件更新导致的问题,求教,有没有遇到这样的情况

支持(0) 反对(0) 万事如意- | 园豆:93 (初学一级) | 2018-07-15 11:07

@万事如意-: 在UI和线程加入log跟踪一下

支持(0) 反对(0) 大豆男生 | 园豆:608 (小虾三级) | 2018-07-15 11:16

都加过了,try catch 都没有异常发现

支持(0) 反对(0) 万事如意- | 园豆:93 (初学一级) | 2018-07-15 11:18
0

在你的界面不起眼的地方,加一个label. 后台新起一个线程, 用这个线程每1秒获取一下当前时间,用委托更新到label上 . winform 的程序貌似在界面长时间无刷新的情况下会进入假死状态. 我一般写界面程序的时候都会加上这么一个时间.

百鸟朝凤 | 园豆:258 (菜鸟二级) | 2018-07-15 17:02

我界面上有加上时间的,是winform timer 然后用event 去更新时间的,假死时时间也不动了,我

支持(0) 反对(0) 万事如意- | 园豆:93 (初学一级) | 2018-07-15 17:11

查看当时时间点log 也没有发现任何异常抛出

支持(0) 反对(0) 万事如意- | 园豆:93 (初学一级) | 2018-07-15 17:12

@万事如意-: 把定时器换成线程试试呢

支持(0) 反对(0) 百鸟朝凤 | 园豆:258 (菜鸟二级) | 2018-07-15 17:16

试过了,改成线程后时间是可以正常显示了,但是主界面还是假死,应该可以确定是UI线程被哪里卡住了,所以现在我把所有需要更新的控件都用委托做了处理,可是还是偶尔会假死,不知道该怎么调试了,

支持(0) 反对(0) 万事如意- | 园豆:93 (初学一级) | 2018-07-15 17:30

Winform 自己类型中的timer 应该会处理很好吧,不至于自己卡主,就算卡住了,等待一会也应该可以好,不应该一直拉着无法拖动

支持(0) 反对(0) 万事如意- | 园豆:93 (初学一级) | 2018-07-15 17:33

@万事如意-: 你别的地方还有用timer的地方没,看下timer是引用的哪个,winform里面有3个timer,用的是线程下面的那个么

支持(0) 反对(0) 百鸟朝凤 | 园豆:258 (菜鸟二级) | 2018-07-15 17:46

没有,用system thread timers time ,显示时间就是控件里面那个timer Winform timer

支持(0) 反对(0) 万事如意- | 园豆:93 (初学一级) | 2018-07-15 17:52

@万事如意-: 额....那我唯一能想到的就只能是,挨个的删控件,看看是哪个控件更新引起的假死了...

支持(0) 反对(0) 百鸟朝凤 | 园豆:258 (菜鸟二级) | 2018-07-15 17:53

所以你是觉得是控件更新导致的问题吗?

支持(0) 反对(0) 万事如意- | 园豆:93 (初学一级) | 2018-07-15 17:54

@万事如意-: 现在不确定,就是挨个的删除方法,取消更新控件,用排除法来查找问题

支持(0) 反对(0) 百鸟朝凤 | 园豆:258 (菜鸟二级) | 2018-07-15 17:58

关健没有办法验证,有时候几天才发生一次

支持(0) 反对(0) 万事如意- | 园豆:93 (初学一级) | 2018-07-15 18:29
0

程序假死,说明有主线程正在运行计算什么的,在计算结束之后,才会操作,你试试吧所有的都用线程来做

一叶兰舟飘 | 园豆:351 (菜鸟二级) | 2018-07-16 10:16

关键主线程并不没有计算处理什么大的数据或者逻辑,如果是计算处理时间长的问题,至少等一会就可以响应过来的,我现在是一直都是假死的现象

支持(0) 反对(0) 万事如意- | 园豆:93 (初学一级) | 2018-07-16 10:21
0

有没有.Net 大神可以点拨一下,感谢

万事如意- | 园豆:93 (初学一级) | 2018-07-16 14:57
0

可能是程序问题,要检查代码。如果一个加载数据的方法没有新开现场,那么在数据操作的时候,你也程序页面会假死。

开发小白 | 园豆:206 (菜鸟二级) | 2018-07-27 17:34
0

请问你的问题解决了吗?我最近也碰到相同的情形了

雨过无痕 | 园豆:202 (菜鸟二级) | 2020-06-02 17:36

请问你的解决了没

支持(0) 反对(0) 晓道 | 园豆:297 (菜鸟二级) | 2021-05-28 10:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册