重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
“卡死”是一个非常主观的描述,如果你要让主线程杀掉卡死的线程,那么你必须给“卡死”做出准确的定义。
成都创新互联公司2013年开创至今,是专业互联网技术服务公司,拥有项目成都网站建设、成都做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元台州做网站,已为上家服务,为台州各地企业和个人服务,联系电话:18980820575
什么是卡死?30秒没有响应就是卡死?那么“没有响应”的定义又是什么?
你给出这些条件以后,杀掉一个线程就不难。Abort方法,Dispose方法,都可以。
这种情况应该尽量避免,比如将大工作量的内容拆分进行。
但肯定无法完全避免,那么给用户显示一个进度条就非常必要了。
如果可能,还应该配上当前进度的一些说明。比如类似: 已完成 53/70 等。
插入 DoEvents 也是可以考虑的,但必须做好必要的准备,否则会出问题。
比如说:用户在处理过程进行到一半的时候,又按了一次按钮,怎么办?
在处理过程中,你的定时器Timer触发了,导致数据变化,怎么办?
甚至,用户直接在过程中点了关闭按钮,怎么办?立刻退还是存完再退?等等。
Timer 是在 主线程里执行的,Thread 是在自己的线程中执行的,多核心的CPU使用线程能提高处理能力。回到你的问题,主线程如果卡死,timer就会失去响应,很正常的。请使用System.Timers.Timer类吧。请参考一下:
1、可能进入了死循环,仔细检查代码有无这种情况。
2、无用的数据一直在累积而没有及时销毁,导致内存占用越来越大,最终崩溃。要注意对象随用随清,及时 Dispose 掉或调用 GC.Collect。