たくさんのものを持つ ListView があります。17 番目の場所にあるものはすべて壊れます (ObjectDisposedException "Cannot read from a closed TextReader")。1 から 16 だけでなく 18 から 24 も問題なく動作します。x を 17 番目から 16 番目に移動すると、再び機能しますが、新しい 17 番目が壊れます。私のコードは特定の場所を参照していません。
XML ファイルの形式は次のとおりです。
<Profiles>
<Profile name="a" type="A">
<ListOne>1,2,3,4,5,6,7,8</ListOne>
<ListTwo>1,2,3,4,5,6,7,8</ListTwo>
</Profile>
<Profile name="b" type="B">
...
...
</Profiles>
コードは簡単です。興味のあるプロファイルを見つけてサブツリーとして返す方法があります
string CurrentProfile = "";
using (StreamReader SR = new StreamReader(MyXMLFilePath))
{
XmlTextReader TR = new XmlTextReader(SR);
do
{
TR.ReadToFollowing("Profile");
TR.MoveToFirstAttribute();
CurrentName = TR.Value;
TR.MoveToNextAttribute();
string CurrentType = TR.Value;
if (CurrentName == MyName && CurrentType == MyType)
{
TR.MoveToElement();
XmlReader subtree = TR.ReadSubtree();
return subtree;
}
}
while (CurrentName != "");
}
そして、サブツリーからリスト 1 と 2 を引き出すメソッドがあります。
if(subtree != null)
{
subtree.ReadToFollowing("ListOne");
subtree.Read();
string[] ListOneArray = subtree.Value.Split(',');
subtree.ReadToFollowing("ListTwo");
subtree.Read();
string[] ListTwoArray = subtree.Value.Split(',');
}
そして、ここで問題が発生します。ObjectDisposedException 閉じた TextReader から読み取ることができません。subtree.ReadToFollowing("ListTwo") に到達すると常に中断しますが、XML リストで 17 番目のプロファイルを選択している場合のみです。どの時点でもテキストリーダーを閉じる方法がわかりません。また、これはプロファイル 18、19、20 など、および 1 ~ 16 で機能しますが、そこに何があるかに関係なく、何らかの理由で常に位置 17 で壊れます。17 番目のスポットが他のスポットとどのように違うのかわかりません。
助けてください!