使用for循环从XML网页获取和更新属性

时间:2014-03-17 14:41:33

标签: xml winforms for-loop

我正在尝试使用我在表单上创建的两个框中的XML页面显示数据。

我希望在名为“bText”的框中显示属性“b”,并在名为“aText”的框中显示不同的属性“a”。我在表单上还有一个名为“inputText”的框,这是我告诉程序属性对应的地方。

下面的代码工作正常,但我想循环进入以使其不断更新而不必一直按下返回(因此在注释中尝试循环)。当我尝试将无限循环放入时,表单只显示“a”。显示它也需要很长时间,根本不会更新。如何让循环显示“a”和“b”并正确更新它们?

代码如下:

using System;
using System.IO;
using System.Net;
using System.Xml.Linq;
using System.Xml;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.NetworkInformation;
using System.Diagnostics;
using System.Timers;

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

        private void CheckEnter(object sender, System.Windows.Forms.KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)13)

                //for (; ; )
                {
                    string value = inputText.Text;
                    String xmlURL = "*Web page in XML*" + (value);
                    XmlTextReader XmlReader = new XmlTextReader(xmlURL);

                    while (XmlReader.Read())
                    {
                        string b = (XmlReader.GetAttribute("b"));
                        bool result = (string.IsNullOrWhiteSpace(b));
                        if (result == false)
                        {
                            bText.Text = b;
                        }

                        string a = (XmlReader.GetAttribute("a"));
                        bool result2 = (string.IsNullOrWhiteSpace(a));
                        if (result2 == false)
                        {
                            aText.Text = a;
                        }
                    }
                }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

这样的循环支配UI线程,并且不允许控件更新其显示。

查看BackgroundWorker类以在单独的线程上进行读取,然后调用UI控件的更新。