Tengo estos dos métodos, que quiero ejecutar de forma sincronizada para mantener la UI en buen estado. Sin embargo, todavía está colgando la IU. ¿Alguna sugerencia?C# métodos asíncronos todavía cuelgan UI
async void DoScrape()
{
var feed = new Feed();
var results = await feed.GetList();
foreach (var itemObject in results)
{
var item = new ListViewItem(itemObject.Title);
item.SubItems.Add(itemObject.Link);
item.SubItems.Add(itemObject.Description);
LstResults.Items.Add(item);
}
}
public class Feed
{
async public Task<List<ItemObject>> GetList()
{
var client = new WebClient();
string content = await client.DownloadStringTaskAsync(new Uri("anyUrl"));
var lstItemObjects = new List<ItemObject>();
var feed = new XmlDocument();
feed.LoadXml(content);
var nodes = feed.GetElementsByTagName("item");
foreach (XmlNode node in nodes)
{
var tmpItemObject = new ItemObject();
var title = node["title"];
if (title != null) tmpItemObject.Title = title.InnerText;
var link = node["link"];
if (link != null) tmpItemObject.Link = link.InnerText;
var description = node["description"];
if (description != null) tmpItemObject.Description = description.InnerText;
lstItemObjects.Add(tmpItemObject);
}
return lstItemObjects;
}
}
¿Y cómo llama a sus métodos asíncronos? Sospecho que los llamas y luego acceden a su resultado de forma bloqueante. – CodesInChaos
DoScrape(); dentro de un botón. –
¿Estás usando el hilo de fondo? ¿Qué estás usando ... WPF/Silverlight/WinForms? – sgtz