我正在构建一个 rss 提要阅读器。我使用 Visual Studio 创建了一个入门应用程序。在它的主页上,我添加了一个指向新数据透视页面的链接。所有 rss 事情都发生在我的数据透视页面中。现在在我的 rss 提要列表框中,我最初使用以下代码设置一些列表项:
public PivotPage1()
{
InitializeComponent();
getMeTheNews();
addToCollection("Android is going up","TechCrunch");
lstBox.DataContext = theCollection;
}
private void addToCollection(string p1, string p2)
{
theCollection.Add(new NewsArticle(p1,p2));
}
这是从服务器获取并解析 rss 的其他两个函数,但是当我想将已处理的条目添加到ObservableCollection
ingetTheResponse()
方法时,会导致无效的跨线程访问错误。有什么想法吗?
代码:
private void getMeTheNews()
{
String url = "http://rss.cnn.com/rss/edition.rss";
HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(url);
webRequest.BeginGetResponse(getTheResponse, webRequest);
}
private void getTheResponse(IAsyncResult result)
{
HttpWebRequest request = result.AsyncState as HttpWebRequest;
if (request != null)
{
try
{
WebResponse response = request.EndGetResponse(result);
XDocument doc = XDocument.Load(response.GetResponseStream());
IEnumerable<XElement> articles = doc.Descendants("item");
foreach (var article in articles) {
System.Diagnostics.Debug.WriteLine(article);
try
{
System.Diagnostics.Debug.WriteLine(article.Element("title").Value);
addToCollection(article.Element("title").Value,"CNN");
}
catch (NullReferenceException e) {
System.Diagnostics.Debug.WriteLine(e.StackTrace);
}
}
}
catch(WebException e) {
System.Diagnostics.Debug.WriteLine(e.StackTrace.ToString());
}
}
else
{
}
}