C#WPF XMLReader和XMLWriter System.IO.IOException

C#WPF XMLReader和XMLWriter System.IO.IOException,c#,ioexception,xmlreader,xmlwriter,C#,Ioexception,Xmlreader,Xmlwriter,我有两个按钮在一个WPF 第一种方法将信息写入XML 第二个将其恢复到列表中 写入功能: public static void Write(List<string> numbers) { XmlWriterSettings myWriterSettings = new XmlWriterSettings(); myWriterSettings.CloseOutput = true; myWriterSettings.NewLineOnAttributes =

我有两个按钮在一个WPF

第一种方法将信息写入XML 第二个将其恢复到列表中

写入功能:

public static void Write(List<string> numbers) {

    XmlWriterSettings myWriterSettings = new XmlWriterSettings();
    myWriterSettings.CloseOutput = true;
    myWriterSettings.NewLineOnAttributes = true;
    using (XmlWriter myWriter = XmlWriter.Create(XMLPathRestore, myWriterSettings)) {

        myWriter.WriteStartDocument();
        myWriter.WriteStartElement("Something");

        //Writing numbers into XML

        myWriter.WriteEndElement();
        myWriter.WriteEndDocument();
        myWriter.Close();
    }
}
public static List<string> Read() {

    List<string> numbers = new List<string>();

    XmlReaderSettings myReaderSettings = new XmlReaderSettings();
    myReaderSettings.CloseInput = true;

    if (File.Exists(XMLPath) == true) {
        XmlReader myReader = XmlReader.Create(XMLPath, myReaderSettings);
        while (myReader.Read()) {
            //Fill List<string> numbers from XML
        }
    }
    return concernNumbers;
}
公共静态无效写入(列表编号){
XmlWriterSettings myWriterSettings=新的XmlWriterSettings();
myWriterSettings.CloseOutput=true;
myWriterSettings.NewLineOnAttributes=true;
使用(XmlWriter myWriter=XmlWriter.Create(XMLPathRestore,myWriterSettings)){
myWriter.WriteStartDocument();
myWriter.WriteStarteElement(“某物”);
//将数字写入XML
myWriter.WriteEndElement();
myWriter.WriteEndDocument();
myWriter.Close();
}
}
读取功能:

public static void Write(List<string> numbers) {

    XmlWriterSettings myWriterSettings = new XmlWriterSettings();
    myWriterSettings.CloseOutput = true;
    myWriterSettings.NewLineOnAttributes = true;
    using (XmlWriter myWriter = XmlWriter.Create(XMLPathRestore, myWriterSettings)) {

        myWriter.WriteStartDocument();
        myWriter.WriteStartElement("Something");

        //Writing numbers into XML

        myWriter.WriteEndElement();
        myWriter.WriteEndDocument();
        myWriter.Close();
    }
}
public static List<string> Read() {

    List<string> numbers = new List<string>();

    XmlReaderSettings myReaderSettings = new XmlReaderSettings();
    myReaderSettings.CloseInput = true;

    if (File.Exists(XMLPath) == true) {
        XmlReader myReader = XmlReader.Create(XMLPath, myReaderSettings);
        while (myReader.Read()) {
            //Fill List<string> numbers from XML
        }
    }
    return concernNumbers;
}
公共静态列表读取(){
列表编号=新列表();
XmlReaderSettings myReaderSettings=新的XmlReaderSettings();
myReaderSettings.CloseInput=true;
if(File.Exists(XMLPath)==true){
XmlReader myReader=XmlReader.Create(XMLPath,myReaderSettings);
while(myReader.Read()){
//从XML填充列表编号
}
}
返回相关编号;
}
当我现在交替读写几次之后,我会得到一个System.IO.IOException,它告诉我该进程无法访问XML文件,因为它被另一个进程使用

我想我可以通过将writer和reader上的CloseInput设置为true来处理这个问题,但它不起作用


有人有什么想法吗?

读完后关闭阅读器:

myReader.Close();

阅读完毕后关闭阅读器:

myReader.Close();

写入程序上已经有一个
using
-块,当该块离开时,该块将自动关闭
XmlWriter
。将using块添加到读取代码中应该可以工作

using (XmlReader myReader = XmlReader.Create(XMLPath, myReaderSettings))
{
  while (myReader.Read()) {
    //Fill List<string> numbers from XML
  }
}
使用(XmlReader myReader=XmlReader.Create(XMLPath,myReaderSettings))
{
while(myReader.Read()){
//从XML填充列表编号
}
}
通常,最好使用实现
IDisposable
using
的类来确保调用
Dispose
并清理所有资源


请参阅。

您在写入程序上已经有一个
使用
-块,该块离开时应自动关闭
XmlWriter
。将using块添加到读取代码中应该可以工作

using (XmlReader myReader = XmlReader.Create(XMLPath, myReaderSettings))
{
  while (myReader.Read()) {
    //Fill List<string> numbers from XML
  }
}
使用(XmlReader myReader=XmlReader.Create(XMLPath,myReaderSettings))
{
while(myReader.Read()){
//从XML填充列表编号
}
}
通常,最好使用实现
IDisposable
using
的类来确保调用
Dispose
并清理所有资源

请看

using块将在完成后处理每个读卡器实例,我建议您使用
using块


using块将在完成后处理每个读卡器实例,我建议您使用
using块

是否在其他地方打开XML文件?是否在其他地方打开XML文件?我想说的是,您甚至可以执行myReader.dispose(),因为XmlReader实现IDisposable接口。这应该是确保您处理对象使用的所有资源的正确方法。我想说的是,您甚至可以执行myReader.dispose(),因为XmlReader实现IDisposable接口。这应该是确保处理对象使用的所有资源的正确方法。