首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XmlTextReader阻止应用程序

XmlTextReader阻止应用程序
EN

Stack Overflow用户
提问于 2012-10-30 02:03:20
回答 3查看 147关注 0票数 1

我使用XmlTextReader阅读器在线获取一些数据。

在这个阶段,应用程序就像被阻塞了一样。

我试过使用BeginInvoke,但它没有很大的帮助。

或者我可能需要实现某种类型的已完成操作……

我不知道。

有没有办法解决这个问题?

谢谢!

代码语言:javascript
复制
var searchUrl = "http://weather.service.msn.com/find.aspx?outputview=search&src=vista&weasearchstr=" + query;
// Application is blocked here
var reader = new XmlTextReader(searchUrl);

while (reader.Read())
{
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-30 02:10:12

如果您使用的是c# 5.0,则async/await可在此处提供帮助

代码语言:javascript
复制
public async void SOQuestion(string query)
{
    var searchUrl = "http://weather.service.msn.com/find.aspx?outputview=search&src=vista&weasearchstr=" + query;

    WebClient wc = new WebClient();
    string xml = await wc.DownloadStringTaskAsync(searchUrl);

    var xDoc = XDocument.Parse(xml);

    var results = xDoc.Descendants("weather")
                        .Select(w => new
                        {
                            Location = w.Attribute("weatherlocationname").Value,
                            Temp = w.Element("current").Attribute("temperature").Value,
                            SkyText = w.Element("current").Attribute("skytext").Value,

                        })
                        .ToList();

    dataGridView1.DataSource = results;
}
票数 2
EN

Stack Overflow用户

发布于 2012-10-30 02:35:25

TPL (Task Parallelization Library,任务并行化库)是一种很好的、简单的方法来处理像这样的简单任务。如果您有一个用于设置XMLReader的方法,并且有一个您想要在之后调用的方法,它将如下所示:

代码语言:javascript
复制
Task XmlReaderTask = Task.Factory.StartNew(() => ReadXmlUrl(url));
XmlReaderTask.ContinueWith(x => SometMethodToDoAfter());

它也不需要你使用TPL5.0(我确信新的sync和await关键字是处理这个问题的更好的方法),但是C#已经存在一段时间了,并且只在.NET的新版本中变得更好,所以为了快速而简单地介绍一些基本的线程,绝对值得一看。

票数 1
EN

Stack Overflow用户

发布于 2012-10-30 02:06:11

您需要使用Task<bool> ReadAsync()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13127196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档