由 TypeInitializationException 引起的问题

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 类型构造完成,这样如果执行中断时,至少保证 类型构造函数完成。

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

时间: 2024-09-07 19:27:26

由 TypeInitializationException 引起的问题的相关文章

C#引入一个DLL后,调用DLL中的函数碰到System.TypeInitializationException

问题描述 我做一个C#项目,项目引入了一个DLL,但是调用时弹出了如下异常Anunhandledexceptionoftype'System.TypeInitializationException'occurredinstanford-corenlp-3.5.2.dll,这个DLL没有问题,在别人的电脑上能正确执行,但是在我的电脑上弹出了上面的错误,请大神指导~ 解决方案 解决方案二:你要看TypeInitializationException.InnerException来确定具体的异常信息解

C#调用matlab出现TypeInitializationException

问题描述 网上有一些写C#调用matlab基本流程的,比如http://blog.csdn.net/yanqlv/article/details/5067872妹子是个菜鸟,对这些不懂,就照着上面的步骤做的.但是其中有一个问题,博客里面说的是在自己的电脑上matlab编译dll,然后同一台电脑上VS测试调用,现在我遇到的问题是不同电脑上调用出现的.同学A写了m文件,编译成A.dll,在自己的电脑上调用里面的函数成功.(matlab2013a+VS2010)但是把该A.dll和MWArray.dl

第九章 方法[《.net框架程序设计》读书笔记]

.net框架|笔记|程序|设计 第九章 方法 一. 实例构造器 1. 前面提到用new操作符创建对象时的三部曲: l 为对象分配内存 l 初始化对象的附加成员(方法表指针和SyncBlockIndex) l 调用实例构造器初始化实例状态 在分配内存时,系统将所有内存位置均置为0值,这就是为什么字段初始化而未赋值时均为0或null值. 不调用实例构造器的情况: l 调用Object.MemberwiseClone()方法创建实例(分配内存:初始化附加成员:将源对象字节拷贝到新创建的对象) l 反序

使用C#进行Word 2002和Excel 2002编程

excel|word|编程 摘要:了解 Microsoft C# 和大型复杂的 COM 服务器之间的 COM 互操作性.本文介绍了如何准备 Office XP COM 对象以及如何在 C# 程序中使用这些对象,同时还提供了一些提示,帮助您理解为何某些操作必须通过特定方法才能实现. 简介 Microsoft(r) Office XP 最强大的功能之一,就是其组件(例如 Microsoft Excel 2002 和 Microsoft Word 2002)以组件对象模型 (COM) 接口的形式公开其

使用 Microsoft Visual C# 进行 Microsoft Word 2002 和 Excel 2002 编程(一)

excel|visual|word|编程 使用 Microsoft Visual C# 进行 Microsoft Word 2002 和 Excel 2002 编程 Kerry Loynd 和 Siew-Moi KhorMicrosoft Corporation 2002年10月 适用于:    Microsoft Office XP    Microsoft Visual C#摘要:了解 Microsoft C# 和大型复杂的 COM 服务器之间的 COM 互操作性.本文介绍了如何准备 Off

当VS.NET2003遇上VS.NET2005,WebService部署何去何从

web 问题描叙] 重装操作系统之后,部署原来的Web Service出现无法访问.无法调试的问题 [原编程环境] VS.NET2003(.NET Framework 1.1 SP1),Windows XP SP1 [新编程环境] VS.NET2003(.NET Framework 1.1 SP1),VS.NET 2005 Beta1(.NET Framework 2.0 ),Windows XP SP2 [问题解决过程] 因为原来的项目一直使用工具VS.NET 2003,所以虽然VS.NET

C#异常处理机制初步

异常处理 今天学习了C#的异常处理机制,现将所学总结如下: 一.C#的异常处理所用到关键字 try 用于检查发生的异常,并帮助发送任何可能的异常. catch 以控制权更大的方式处理错误,可以有多个catch子句. finally 无论是否引发了异常,finally的代码块都将被执行. throw 用于引发异常,可引发预定义异常和自定义异常. 二.C#异常处理的格式 try { 程序代码块: } catch(Exception e) { 异常处理代码块: } finally { 无论是否发生异常

.NET框架类命名空间

.net框架|命名空间 Microsoft.CSharp Microsoft.VisualBasic Microsoft.Win32 System System.CodeDom System.CodeDom.Compiler System.Collections System.Collections.Specialized System.ComponentModel System.ComponentModel.Design System.ComponentModel.Design.Seriali

WCF异常问题

 "System.Transactions.Diagnostics.DiagnosticTrace"的类型初始值设定项引发异常 未处理System.TypeInitializationException HResult=-2146233036 Message="System.ServiceModel.Diagnostics.TraceUtility"的类型初始值设定项引发异常. Source=System.ServiceModel TypeName=System.S