C# 反序列化期间线程被中止错误(但未中止)
非常奇怪的错误,基本上,当用户登录到我的应用程序时,我会触发一个线程,该应用程序使用以下代码段从xml文件加载数据:C# 反序列化期间线程被中止错误(但未中止),c#,multithreading,xmlserializer,threadabortexception,C#,Multithreading,Xmlserializer,Threadabortexception,非常奇怪的错误,基本上,当用户登录到我的应用程序时,我会触发一个线程,该应用程序使用以下代码段从xml文件加载数据: public static T Deserialize<T>(String Path) { T Result = Activator.CreateInstance<T>(); try { if (File.Exists(Path)) {
public static T Deserialize<T>(String Path)
{
T Result = Activator.CreateInstance<T>();
try
{
if (File.Exists(Path))
{
using (FileStream fs = new FileStream(Path, FileMode.Open))
{
if (fs.Length > 0)
{
System.Xml.Serialization.XmlSerializer s = new System.Xml.Serialization.XmlSerializer(typeof(T));
Result = (T)s.Deserialize(fs);
}
fs.Close();
}
// force clean up!
GC.Collect();
}
return Result;
}
catch (Exception ex)
{
Console.WriteLine("Deserialize '{0}' : {1}", Path, ex.ToString());
return Result;
}
}
如果有必要的话,它正在加载的XML文件大约是3MB。每次在一个特定文件上失败时,都会出现以下异常:
反序列化“C:\bin\Debug\Settings\Objects.xml”:
System.Threading.ThreadAbortException:正在中止线程
在System.RuntimeMethodHandle.InvokeMethodObject目标处,对象[]
参数,签名sig,布尔构造函数
位于System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternalObject
obj,对象[]参数,对象[]参数
在System.Reflection.RuntimeMethodInfo.InvokeObject对象中,
BindingFlags invokeAttr,Binder Binder,对象[]参数,
文化信息文化
位于System.Xml.Serialization.TempAssembly.InvokeReaderXmlMapping、XmlReader、XmlDeserializationEvents、String
编码风格
位于System.Xml.Serialization.XmlSerializer.DeserializeXmlReader xmlReader,字符串编码样式,XmlDeserializationEvents
在System.Xml.Serialization.XmlSerializer.DeserializeStream上
在Classes.XmlSerializer.Deserialize中的[T]字符串路径
c:\Classes\XmlSerializer.cs:第82行无法加载以前的数据!
System.Threading.ThreadAbortException:正在中止线程
在Classes.XmlSerializer.Deserialize中的[T]字符串路径
c:\Classes\XmlSerializer.cs:第96行
在c:\Controllers\ObjectDataCollection.cs中的Controllers.ObjectDataCollection.ObjectThread.LoadData处:第74行
我完全不知道如何进一步调试它。我知道线程并没有被中止,因为尝试反序列化后的下一行是一个扫描东西的循环,它运行得非常好。线程没有重新启动,只是在一个地方启动
有人对我如何进一步调试这个有什么想法吗?我在这里完全不知所措。以下是所有代码:您是否有可以验证XML的XSD?不,我没有,但它是有效的XML奇怪的是,似乎只有当文件变大时才会发生,比如超过3MB或soHmm。。3MB的XML。嗯,给它一个更大的堆栈,看看会发生什么。还要确保使用Crtl-Alt-E来中断所有异常-它应该在导致问题的自动生成的.cs文件中的代码行中断。