【问题标题】:How to read in an XML file asynchronously?如何异步读取 XML 文件?
【发布时间】:2018-08-06 01:27:12
【问题描述】:

我正在编写一个用于数据后处理的 Windows 窗体应用程序。我有一个允许拖放文件的面板。 XML 文件将非常大(足以减慢 UI 的速度)。因此我想异步读取文件。到目前为止,对于应用程序的这一部分,我有两种方法:

namespace myApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void DragDropPanel_DragEnter(object sender, DragEventArgs e)
        {
            // Trigger the Drag Drop Event
            e.Effect = DragDropEffects.Copy;
        }

        private async void DragDropPanel_DragDrop(object sender, DarEventArgs e)
        {
            // Identifiers used are:
            string[] filePaths = (string[])e.Data.GetData(DataFormats.FileDrop);
            string filePath = filePaths[0],
                 fileName = System.IO.Path.GetFileName(filePath);

             // Read in the file asynchronously
             XmlReader reader = XmlReader.Create(filePath);
             //reader.Settings.Async = true; // ** (SECOND ERROR) ** \\
             while (await reader.ReadAsync()) // ** (FIRST ERROR) ** \\
             { 
                  Console.WriteLine("testing...");
             }

             // Do other things...
        }
    }
}

现在,当我拖放 XML 文件时,出现以下错误:

System.InvalidOperationException:
Set XmlReaderSettings.Async to true if you want to use Async Methods.

由于我用 FIRST ERROR 标记的行而发生此错误。我试图通过取消注释上面我用 SECOND ERROR 标记的行来解决这个问题。现在,当我拖放时,我得到了错误:

System.Xml.Xml.XmlException:
The XmlReaderSettings.Async property is read only and cannot be set

所以我去 MS Docs 获取 XmlReaderSettings.Async 属性,它说:

如果要在该实例上使用异步 XmlReader 方法,在创建新 XmlReader 实例时必须将此值设置为 true

然后给出了 SECOND ERROR 发生的原因。但是,我无法让它发挥作用。有什么建议吗?

【问题讨论】:

    标签: c# asynchronous xmlreader


    【解决方案1】:

    您需要使用正确的设置创建 XmlReader。

    XmlReaderSettings settings = new XmlReaderSettings 
    {
        Async = true   
    };
    XmlReader reader = XmlReader.Create(filePath, settings);
    

    参考资料: https://msdn.microsoft.com/en-us/library/ms162474(v=vs.110).aspx https://msdn.microsoft.com/en-us/library/system.xml.xmlreadersettings(v=vs.110).aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-20
      • 2021-08-07
      • 2019-01-13
      相关资源
      最近更新 更多