在反序列化期间线程被中止错误(但没有中止)

时间:2013-01-31 16:36:52

标签: c# multithreading xmlserializer threadabortexception

非常奇怪的错误,基本上我会在用户登录我的应用程序后触发一个线程,该应用程序使用此代码片段从xml文件加载数据:

    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:正在中止线程。

     

at System.RuntimeMethodHandle.InvokeMethod(Object target,Object []   arguments,Signature sig,Boolean constructor)

     

at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object   obj,Object []参数,Object []参数)

     

在System.Reflection.RuntimeMethodInfo.Invoke(Object obj,   BindingFlags invokeAttr,Binder binder,Object []参数,   文化信息文化)        at System.Xml.Serialization.TempAssembly.InvokeReader(XmlMapping mapping,XmlReader xmlReader,XmlDeserializationEvents事件,String   的encodingStyle)        在System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader,String encodingStyle,XmlDeserializationEvents事件)        在System.Xml.Serialization.XmlSerializer.Deserialize(Stream stream)

     

在Classes.XmlSerializer.Deserialize [T](String Path)中   c:\ Classes \ XmlSerializer.cs:第82行无法加载以前的数据!   System.Threading.ThreadAbortException:正在中止线程。

     

在Classes.XmlSerializer.Deserialize [T](String Path)中   c:\ Classes \ XmlSerializer.cs:第96行        在C:\ Controllers \ ObjectDataCollection.cs中的Controllers.ObjectDataCollection.ObjectThread.LoadData():第74行

我完全失去了如何进一步调试这个问题。我知道线程没有被中止,因为尝试反序列化之后的下一行是一个扫描事物的循环,它运行得非常好(线程没有重新启动,它只在一个地方启动)。 / p>

有没有人对如何进一步调试这一点有任何想法?我在这里完全失败了。以下是所有代码:http://pastebin.com/F30vD9KL

0 个答案:

没有答案