多UI线程WPF程序随机挂起问题

一个C#开发的WPF程序在Windows10上运行时出现随机挂起,通过日志、GDIView和SPY++分析确定问题与UI主线程有关。经过网上搜索发现可能与多UI线程操作有关,调整代码后问题得到解决。建议避免多UI线程,改用其他方式如设置TopMost属性模拟对话框效果。
摘要由CSDN通过智能技术生成

问题描述

一个使用C#开发的程序,在某台Windows10,总是随机挂起,1天总有3、4次。主界面突然就挂起在任务栏里,无法使用,只有杀掉重新启动。具体什么操作造成的不能判断,因为都是在操作其它程序后,准备切换回来时才发现问题的。

实地查看

先查看了程序本身的日志,发现还是有线程记录日志输出,这说明进程还是活着的。UI主线程没有日志输入,初步判断问题在UI主线程。
然后使用了GDIView和SPY++工具来做进一步来诊断。
使用GDIView可以查看窗体的GDI句柄数目,Windows程序,GDI句柄数目如果过多,界面会僵住。查看下来,这个程序的GDI句柄数只有200多,不是句柄数目过多问题。
使用SPY++,能定位到程序窗口。选中这个窗口,点击右键菜单“消息”,发现居然还有WM_开头的消息出来。既然能够接受Windows消息,说明消息循环和主线程都健在。
综合前面2者,应该还是程序UI部分的问题了。

那具体什么原因造成的呢?暂时没有头绪。

网上搜索

于是,就网上搜索类似情况。找到2个链接。
https://www.devexpress.com/Support/Center/Question/Details/T235617

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值