日期:2014-05-17  浏览次数:20815 次

疑难杂症:Winfrom最小化程序到任务栏后,等一会儿就无法恢复了?
程序运行后,点击窗口最小化或者切换到其他的应用程序界面去,过一段时间(几分钟到几十分钟不等)不操作它,再切换回

去,就无法恢复显示窗口。只能通过任务管理器去结束进程才可以关闭程序,这到底是怎么一回事呢?内存占用率也不

高。。。

跪求高人指点迷津,或者说说造成这种情况的可能性?

补充说明,普通的Winfrom程序。里面用了evpress.XtraGrid控件系列,多线程等技术,但最小化或切换到后台运行时,系统

根本没有做任何额外操作。





------解决方案--------------------
猜不出,建议你分别排查。

猜测起来应该就几种愿意:控件bug、重绘受阻、程序死锁。从故障出现时间不固定来看,也许程序死锁的可能性要大一点。
------解决方案--------------------
应该还是代码设计引起的,只能一步步查了,记录日志,或者把代码都屏蔽,一条条放开,看看哪里出问题
------解决方案--------------------
重点排查与任务栏相关的几小段事件程序
------解决方案--------------------
现在的问题就在于:你不操作它相当时间之后才会发生?那么,当你不操作它一段时间之后,发生了什么?
------解决方案--------------------
把你的应用程序放到别的电脑或是系统中去运行还是这样的情况??
------解决方案--------------------
学习一下,解决错误 的方法
------解决方案--------------------
排除法咯。。没办法。。。先保留界面方面的代码,注释掉其他方法;再逐步恢复方法看看是哪里的方法导致这个问题
------解决方案--------------------
线程问题
------解决方案--------------------
放个断点看看在哪里出错了,另外不要Try起来,不然看不到错误也是没办法解决的。
------解决方案--------------------
呵呵,你应该是使用后台线程死循环,监听端口什么的,我原来也碰到这个问题,郁闷的不行。
我的是运行10分钟后,关闭程序就弹。
后来发现症结了,是因为调用的后台线程还在跑,前台程序关闭,卸载后台线程的时候,线程还在Thread.Sleep
就是相差1毫秒,都弹错,后台线程又不能单步,头疼啊。

后来我修改了监控类,继承了IDisposable并重写的Dispose()方法,加了一句threadRun.DisableComObjectEagerCleanup();,就一直相安无事了(threadRun是我的后台线程)
------解决方案--------------------
据经验。很怀疑是线程之间的问题。引起的。重点排查
------解决方案--------------------
不是多线程吗?怎么才一个BackGroundWork?
------解决方案--------------------
不用纠结死循环,这个应该是线程结束时没有及时的释放。
------解决方案--------------------
做个简单的例子,你做个线程,直接放后台Thread.Sleep(1000000);然后直接关主窗体,看看是不是报相同的错误,当然你的后台线程在子窗体申明的话,关子窗体就有效果了。