Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 反序列化期间线程被中止错误(但未中止)_C#_Multithreading_Xmlserializer_Threadabortexception - Fatal编程技术网

C# 反序列化期间线程被中止错误(但未中止)

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)) {

非常奇怪的错误,基本上,当用户登录到我的应用程序时,我会触发一个线程,该应用程序使用以下代码段从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:正在中止线程

在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文件中的代码行中断。