I need to download a few text from different urls, then I am using the CountDownEvent to handle the number of times that my event Donwnload is completed, but the thing is my CountDownEvent never is set to Zero and this remains waiting.
Any idea what is wrong with this code?
namespace WebApplication.AsyncCall
{
using System;
using System.Collections.Generic;
using System.Net;
using System.Threading;
public partial class _Default : System.Web.UI.Page
{
private CountdownEvent countDown = null;
public CountdownEvent CountDown
{
get
{
if (this.countDown == null)
{
this.countDown = new CountdownEvent(1);
}
return this.countDown;
}
}
private List<string> text = null;
public List<string> Text
{
get
{
if (this.text == null)
{
this.text = new List<string>();
}
return this.text;
}
}
protected void Page_Load(object sender, EventArgs e)
{
List<string> rssSources = new List<string>();
rssSources.Add(@"http://news.yahoo.com/rss/entertainment");
rssSources.Add(@"http://go.microsoft.com/fwlink/?linkid=84795&clcid=409");
foreach (string uri in rssSources)
{
this.CountDown.AddCount();
LoadSources(uri);
}
this.CountDown.Signal();
this.CountDown.Wait();
}
private void LoadSources(string uri)
{
WebClient client = new WebClient();
client.DownloadStringAsync(new Uri(uri, UriKind.Absolute));
client.DownloadStringCompleted += (s, a) =>
{
if (a.Error == null && !a.Cancelled)
{
this.Text.Add(a.Result);
this.CountDown.Signal();
}
};
}
}
}