1

非常に奇妙なエラーです。基本的に、ユーザーがアプリにログインすると、次のコード スニペットを使用して 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 です。この例外を除いて、特定のファイルで失敗するたびに:

Deserialize 'C:\bin\Debug\Settings\Objects.xml': System.Threading.ThreadAbortException: スレッドが中止されました。

System.RuntimeMethodHandle.InvokeMethod (オブジェクト ターゲット、オブジェクト [] 引数、署名 sig、ブール コンストラクター) で

System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal (オブジェクト obj、オブジェクト [] パラメーター、オブジェクト [] 引数) で

System.Reflection.RuntimeMethodInfo.Invoke (オブジェクト obj、BindingFlags invokeAttr、バインダー バインダー、オブジェクト [] パラメーター、CultureInfo カルチャ) で System.Xml.Serialization.TempAssembly.InvokeReader (XmlMapping マッピング、XmlReader xmlReader、XmlDeserializationEvents イベント、文字列 encodingStyle) でSystem.Xml.Serialization.XmlSerializer.Deserialize(ストリーム ストリーム)

c:\Classes\XmlSerializer.cs:line 82 の Classes.XmlSerializer.Deserialize[T](String Path) で以前のデータを読み込めません! System.Threading.ThreadAbortException: スレッドが中止されました。

Classes.XmlSerializer.Deserialize[T](String Path) (c:\Classes\XmlSerializer.cs:line 96) at Controllers.ObjectDataCollection.ObjectThread.LoadData() in c:\Controllers\ObjectDataCollection.cs:line 74

これをさらにデバッグする方法について、私は完全に途方に暮れています。試行された逆シリアル化の後の次の行は、物事をスキャンするループであり、完全に正常に実行されるため、スレッドが中止されていないことを私は知っています (スレッドは再起動されず、1 か所で開始されただけです)。

これをさらにデバッグする方法について誰か考えがありますか? 私はここで完全に途方に暮れています。ここにすべてのコードがあります: http://pastebin.com/F30vD9KL

4

0 に答える 0