C# winform程序界面假死但是资源管理器显示Running,界面无法关闭的可能性

weixin_41567643 2018-07-18 10:45:54
C# winform程序界面假死但是资源管理器显示Running,界面无法关闭的可能性
1. 应用程序运行一段时间会出现界面假死现象
2. 其他线程在Log记录中可以确认还在正常工作
3.界面主线程没有随时更新数据和控件更新
4.还会有什么可能会导致界面假死,请各位指教?
5.感觉不知道什么时候触发了导致主线程卡死,但是没有方向,求指教

线程卡死和CPU 耗尽,应该都是这种现象,请指教?感谢
...全文
729 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
吹风的兔子 2018-08-07
  • 打赏
  • 举报
回复
UI没死,就是很慢、很卡
一般是这种原因:

> 你的后台线程 更新UI 太频繁。
> 尽量不要用 BeginInvoke() 更新界面。 这个函数是异步的,能提高后端线程的性能 (后端线程运算太快,就意味着后端线程反馈也快、反馈快就意味着 后端线程 更新UI 次数多)

假设一个场景:
> 一个公司只有一个财务 (UI线程),其他员工(后端线程)都能找这个财务报销单据。
> 张三 每隔 2分钟 就有一个 100块的发票要报销。

现在有三种场景:

> 张三每隔2分钟就来一次, 丢下发票就走 BeginInvoke() —— 财务上一张发票没处理玩,张三又来了 (财务很忙、但是没死)—— 这个也是你的程序问题。

> 张三 每2分钟 有100块的发票 —— 你让他们 每隔1个消失 来报销一次(别特么 2分钟来一次、2分钟来一次)

> 张三 来的时候,丢下发票正准备走 —— 财务说:你等等,等我处理完,你再走 —— 这个就是 Invoke() 【财务的事情和张三没关系、但是让 张三等待 —— 可以让财务 没那么忙(财务处理完、张三才走、这时财务有2分钟的休息时间)】


weixin_41567643 2018-07-25
  • 打赏
  • 举报
回复
引用 26 楼 darkinger 的回复:
你用的是WIN7吧,程序卡死时,打开任务管理器,选中你的程序,右键,创建转储文件,把这个文件用你的VS打开,OK,你就晓得你的程序卡在哪个地方了 记得同时打开你的源码哦
会显示在Exception code 段吗? 我自己写了下死循环让UI卡死,创建转存打开后没有显示提示哪里异常啊,求指教
gangAndgang 2018-07-25
  • 打赏
  • 举报
回复
你用的是WIN7吧,程序卡死时,打开任务管理器,选中你的程序,右键,创建转储文件,把这个文件用你的VS打开,OK,你就晓得你的程序卡在哪个地方了

记得同时打开你的源码哦
weixin_41567643 2018-07-25
  • 打赏
  • 举报
回复
引用 28 楼 darkinger 的回复:
你这是卡死,不是崩溃,肯定不会显示异常了 你应该看所有线程,看其当前在执行哪个函数
两个子线程死锁都测试过了,不会使UI 主线程假死 所以只要不是UI线程,都不会导致界面假死,应该还有其他可能,求指教
gangAndgang 2018-07-25
  • 打赏
  • 举报
回复
你这是卡死,不是崩溃,肯定不会显示异常了
你应该看所有线程,看其当前在执行哪个函数
weixin_41567643 2018-07-24
  • 打赏
  • 举报
回复
引用 1 楼 xomix 的回复:
异步又用wait、while(true)之类的死循环等。太多了,现在常见这两种。
重开一个线程做while(true)死循环应该没有问题吧
风吹腚腚凉 2018-07-20
  • 打赏
  • 举报
回复
引用 20 楼 weixin_41567643 的回复:
[quote=引用 18 楼 wjfwd2010 的回复:]
还有你夸线程更新操作控件应该用异步的 BeginInvoke 也就是这个方法。同步有bug,在某种极端的情况下就会出问题。

你说的对,我更新控件时,是用this.beginInvoke(new delegate {} ) 的[/quote]
那没看见你代码就不知道具体什么原因了
吉普赛的歌 2018-07-20
  • 打赏
  • 举报
回复
weixin_41567643 2018-07-20
  • 打赏
  • 举报
回复
引用 23 楼 Jef_Zhang 的回复:
线程中有操作界面控件的操作吧?
有的, 先把数据存储在arraylist , 然后线程读array list数据赋给 list box 和listview,这样的做法一直也没有问题的呀
Jef_Zhang 2018-07-20
  • 打赏
  • 举报
回复
线程中有操作界面控件的操作吧?
weixin_41567643 2018-07-19
  • 打赏
  • 举报
回复
引用 18 楼 wjfwd2010 的回复:
还有你夸线程更新操作控件应该用异步的 BeginInvoke 也就是这个方法。同步有bug,在某种极端的情况下就会出问题。
你说的对,我更新控件时,是用this.beginInvoke(new delegate {} ) 的
weixin_41567643 2018-07-19
  • 打赏
  • 举报
回复
引用 17 楼 wjfwd2010 的回复:
private void button1_Click(object sender, EventArgs e) { Thread.Sleep(1000000000); MessageBox.Show("你好"); } 很难理解么? 这句话?
这个可以理解,没有这种可能
风吹腚腚凉 2018-07-19
  • 打赏
  • 举报
回复
还有你夸线程更新操作控件应该用异步的 BeginInvoke 也就是这个方法。同步有bug,在某种极端的情况下就会出问题。
风吹腚腚凉 2018-07-19
  • 打赏
  • 举报
回复
private void button1_Click(object sender, EventArgs e)
{
Thread.Sleep(1000000000);
MessageBox.Show("你好");
}
很难理解么?
这句话?
weixin_41567643 2018-07-19
  • 打赏
  • 举报
回复
引用 15 楼 wjfwd2010 的回复:
[quote=引用 14 楼 weixin_41567643 的回复:] [quote=引用 13 楼 wjfwd2010 的回复:] [quote=引用 12 楼 weixin_41567643 的回复:] [quote=引用 11 楼 wjfwd2010 的回复:] [quote=引用 10 楼 weixin_41567643 的回复:] [quote=引用 9 楼 just59277 的回复:] 看看主线程有没有某个操作非常占时间,是否有需要耗费时间的界面渲染,大数据查询之类的。
感谢你的解答,但是主线程并没有耗时的操作,有的话都已经用线程分开了,再者说,如果是某些操作耗时导致界面假死的话,应该在耗时结束后可以的到反应的,可是并没有[/quote] 有线程一直在跑没结束,了解一下什么叫前台线程,什么叫后台线程,这有什么好奇怪的? 如果你想主线程关闭掉子线程也关闭就设置一下,前台后台线程就好了? 如果你的代码写的很差劲,又不知道修改哪里就在close 事件里加一个强制关闭系统进程的代码就好了。[/quote] 我的问题和你的说的是完全不同,我的程序问题不是关闭不了,无法退出, 我的问题是程序界面假死,运行一段时间后表现是界面无法拖动,资源管理器Running 、CPU使用率5% ,请针对这个问题帮忙解答,感谢![/quote] UI线程休眠了或者结束了都会这样啊[/quote] UI 休眠有什么建议吗?[/quote] 你看看你休眠的代码有没有地方调用错了,休眠的是UI线程的。 这有什么建议?[/quote] UI 怎么会有休眠代码,U I 线程一直在跑,有更新就更新到控件,没有就跳过,不理解你的意思
风吹腚腚凉 2018-07-19
  • 打赏
  • 举报
回复
引用 14 楼 weixin_41567643 的回复:
[quote=引用 13 楼 wjfwd2010 的回复:]
[quote=引用 12 楼 weixin_41567643 的回复:]
[quote=引用 11 楼 wjfwd2010 的回复:]
[quote=引用 10 楼 weixin_41567643 的回复:]
[quote=引用 9 楼 just59277 的回复:]
看看主线程有没有某个操作非常占时间,是否有需要耗费时间的界面渲染,大数据查询之类的。

感谢你的解答,但是主线程并没有耗时的操作,有的话都已经用线程分开了,再者说,如果是某些操作耗时导致界面假死的话,应该在耗时结束后可以的到反应的,可是并没有[/quote]
有线程一直在跑没结束,了解一下什么叫前台线程,什么叫后台线程,这有什么好奇怪的?
如果你想主线程关闭掉子线程也关闭就设置一下,前台后台线程就好了?
如果你的代码写的很差劲,又不知道修改哪里就在close 事件里加一个强制关闭系统进程的代码就好了。[/quote]
我的问题和你的说的是完全不同,我的程序问题不是关闭不了,无法退出,
我的问题是程序界面假死,运行一段时间后表现是界面无法拖动,资源管理器Running 、CPU使用率5% ,请针对这个问题帮忙解答,感谢![/quote]
UI线程休眠了或者结束了都会这样啊[/quote]
UI 休眠有什么建议吗?[/quote]
你看看你休眠的代码有没有地方调用错了,休眠的是UI线程的。
这有什么建议?
weixin_41567643 2018-07-19
  • 打赏
  • 举报
回复
引用 13 楼 wjfwd2010 的回复:
[quote=引用 12 楼 weixin_41567643 的回复:] [quote=引用 11 楼 wjfwd2010 的回复:] [quote=引用 10 楼 weixin_41567643 的回复:] [quote=引用 9 楼 just59277 的回复:] 看看主线程有没有某个操作非常占时间,是否有需要耗费时间的界面渲染,大数据查询之类的。
感谢你的解答,但是主线程并没有耗时的操作,有的话都已经用线程分开了,再者说,如果是某些操作耗时导致界面假死的话,应该在耗时结束后可以的到反应的,可是并没有[/quote] 有线程一直在跑没结束,了解一下什么叫前台线程,什么叫后台线程,这有什么好奇怪的? 如果你想主线程关闭掉子线程也关闭就设置一下,前台后台线程就好了? 如果你的代码写的很差劲,又不知道修改哪里就在close 事件里加一个强制关闭系统进程的代码就好了。[/quote] 我的问题和你的说的是完全不同,我的程序问题不是关闭不了,无法退出, 我的问题是程序界面假死,运行一段时间后表现是界面无法拖动,资源管理器Running 、CPU使用率5% ,请针对这个问题帮忙解答,感谢![/quote] UI线程休眠了或者结束了都会这样啊[/quote] UI 休眠有什么建议吗?
风吹腚腚凉 2018-07-19
  • 打赏
  • 举报
回复
引用 12 楼 weixin_41567643 的回复:
[quote=引用 11 楼 wjfwd2010 的回复:]
[quote=引用 10 楼 weixin_41567643 的回复:]
[quote=引用 9 楼 just59277 的回复:]
看看主线程有没有某个操作非常占时间,是否有需要耗费时间的界面渲染,大数据查询之类的。

感谢你的解答,但是主线程并没有耗时的操作,有的话都已经用线程分开了,再者说,如果是某些操作耗时导致界面假死的话,应该在耗时结束后可以的到反应的,可是并没有[/quote]
有线程一直在跑没结束,了解一下什么叫前台线程,什么叫后台线程,这有什么好奇怪的?
如果你想主线程关闭掉子线程也关闭就设置一下,前台后台线程就好了?
如果你的代码写的很差劲,又不知道修改哪里就在close 事件里加一个强制关闭系统进程的代码就好了。[/quote]
我的问题和你的说的是完全不同,我的程序问题不是关闭不了,无法退出,
我的问题是程序界面假死,运行一段时间后表现是界面无法拖动,资源管理器Running 、CPU使用率5% ,请针对这个问题帮忙解答,感谢![/quote]
UI线程休眠了或者结束了都会这样啊
weixin_41567643 2018-07-19
  • 打赏
  • 举报
回复
引用 11 楼 wjfwd2010 的回复:
[quote=引用 10 楼 weixin_41567643 的回复:] [quote=引用 9 楼 just59277 的回复:] 看看主线程有没有某个操作非常占时间,是否有需要耗费时间的界面渲染,大数据查询之类的。
感谢你的解答,但是主线程并没有耗时的操作,有的话都已经用线程分开了,再者说,如果是某些操作耗时导致界面假死的话,应该在耗时结束后可以的到反应的,可是并没有[/quote] 有线程一直在跑没结束,了解一下什么叫前台线程,什么叫后台线程,这有什么好奇怪的? 如果你想主线程关闭掉子线程也关闭就设置一下,前台后台线程就好了? 如果你的代码写的很差劲,又不知道修改哪里就在close 事件里加一个强制关闭系统进程的代码就好了。[/quote] 我的问题和你的说的是完全不同,我的程序问题不是关闭不了,无法退出, 我的问题是程序界面假死,运行一段时间后表现是界面无法拖动,资源管理器Running 、CPU使用率5% ,请针对这个问题帮忙解答,感谢!
风吹腚腚凉 2018-07-19
  • 打赏
  • 举报
回复
引用 10 楼 weixin_41567643 的回复:
[quote=引用 9 楼 just59277 的回复:]
看看主线程有没有某个操作非常占时间,是否有需要耗费时间的界面渲染,大数据查询之类的。

感谢你的解答,但是主线程并没有耗时的操作,有的话都已经用线程分开了,再者说,如果是某些操作耗时导致界面假死的话,应该在耗时结束后可以的到反应的,可是并没有[/quote]
有线程一直在跑没结束,了解一下什么叫前台线程,什么叫后台线程,这有什么好奇怪的?
如果你想主线程关闭掉子线程也关闭就设置一下,前台后台线程就好了?
如果你的代码写的很差劲,又不知道修改哪里就在close 事件里加一个强制关闭系统进程的代码就好了。
加载更多回复(10)

110,525

社区成员

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

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

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