将在线XML文件写入文本框

时间:2014-02-20 10:51:08

标签: c# xml windows-phone-8

我正在使用PHP脚本生成xml文件。我想将XML文件中的数据写入我的Windows Phone 8应用程序中的Textblock。 当我调试时,我收到的错误没有被catch捕获。错误的打印屏幕:http://i811.photobucket.com/albums/zz38/JelleK1996/errorxml1_zps20df0a45.png 有什么问题?

这是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using System.Xml;
using System.IO;
using System.Xml.Linq;
using System.Diagnostics;

namespace xml1
{
    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();

            // Sample code to localize the ApplicationBar
            //BuildLocalizedApplicationBar();
        }
        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            try
            {
                HttpWebRequest request = WebRequest.Create("http://cocktailpws.net23.net/requests/get_cocktail.php?id=10") as HttpWebRequest;
                request.BeginGetResponse(r =>
                {
                    var reponse = request.EndGetResponse(r);
                    //XDocument xmlDoc = XDocument.Load(reponse.GetResponseStream());
                    XmlReader reader = XmlReader.Create(reponse.GetResponseStream());
                    while (reader.Read())
                    {
                        switch (reader.NodeType)
                        {
                            case XmlNodeType.Element: // Het knooppunt is een element.
                                Console.Write("<" + reader.Name);
                                Console.WriteLine(">");
                                break;
                            case XmlNodeType.Text: //De tekst in elk element weergeven.
                                tb1.Text = tb1.Text + reader.Value + "\r\n";
                                Console.WriteLine(reader.Value);
                                break;
                            case XmlNodeType.EndElement: //Het einde van het element weergeven.
                                Console.Write("</" + reader.Name);
                                Console.WriteLine(">");
                                break;
                        }
                    }
                }, null);
            }
            catch (Exception myExc)
            {
                Console.WriteLine(myExc.Message);
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

首先,你没有在lambda函数中阻塞try catch。这就是为什么你不能处理错误

其次如何解决: 改变:

tb1.Text = tb1.Text + reader.Value + "\r\n";

Dispatcher.BeginInvoke(() =>  {
      tb1.Text = tb1.Text + reader.Value + "\r\n";
    });

第三, 我相信你需要重写你的xml循环,因为你的代码是无效的。如果有很多文本,它将调用文本更改。然后在循环调用文本更改后构建字符串

StringBuilder res = new StringBuilder();
...
//inside xml loop:
   res.AppendLine(reader.Value);
...
//after loop:
  Dispatcher.BeginInvoke(() =>  {
          tb1.Text =  res.ToString();
        });

然后检查一下这是什么错误。或搜索无效的线程调用  invalid thread call

答案 1 :(得分:0)

我相信你必须从UI线程访问tb1,所以我建议尝试使用类似这样的语句:

case XmlNodeType.Text: //De tekst in elk element weergeven.
{
    tb1.Dispatcher.BeginInvoke(() =>
    {
        tb1.Text = tb1.Text + reader.Value + "\r\n";
    });
    Console.WriteLine(reader.Value);
}
break;