我正在使用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);
}
}
}
}
答案 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;