加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

由 TypeInitializationException 引起的问题

发布时间:2020-12-17 02:00:45 所属栏目:安全 来源:网络整理
导读:Alonesword http://blog.csdn.net/alonesword/ ? 今天写了程序升级的东东,其中用到了多线程。 后台线程负责联系服务器进行程序的升级,在升级过程中用户可以随时中断。 此程序在测试环境测试没有问题,待发布到正式环境后,问题来了。 ? 当界面出现时,迅速

Alonesword

http://blog.csdn.net/alonesword/

?

今天写了程序升级的东东,其中用到了多线程。

后台线程负责联系服务器进行程序的升级,在升级过程中用户可以随时中断。

此程序在测试环境测试没有问题,待发布到正式环境后,问题来了。

?

当界面出现时,迅速的点击终止按钮,升级过程的确是立即终止了。但是当点击其他的按钮时,确实没有了反应,查看日志发现现在系统中有很多 TypeInitializationException 的错误。自己跟踪发现一种极端情况下,升级程序出现了问题。

?

升级过程如下:

Updater -> Other Thread -> Worker -> Connect Server -> Download Lastest Package-> Uncompress -> Overwrite file -> Finished

?

由于是启动的后台线程,因此可以由用户控制其升级过程,可随时中断程序的执行。

connect server 的过程中,使用到了 Webservice。问题来了,

如果是在执行 webservice 的类型构造 static Webservice(){} 中,用户中断了程序的执行【通过 Thread.Abort() 终止】,则下次使用 webservice 的任何方法时,都会抛出 ThreadAbortException 的错误。即使在第一次发生 ThreadAbortException 的错误时,使用 thread.ResetAbort() 来重新释放该对象,效果仍然是一样。

?

通过分析上述问题,将界面的控件修改了一下,等待webservices 类型构造完成,这样如果执行中断时,至少保证 类型构造函数完成。

基于此次问题,重新回顾一下调用方法时的过程:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读