非常に奇妙なエラーです。基本的に、ユーザーがアプリにログインすると、次のコード スニペットを使用して 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