0

I need help with this code

WebClient client = new WebClient();
    string url = "http://someUrl.com"

    DispatcherTimer timer = new DispatcherTimer();
                timer.Interval = TimeSpan.FromSeconds(Convert.ToDouble(18.0));
                timer.Start();

                timer.Tick += new EventHandler(delegate(object p, EventArgs a)
                {
                     client.DownloadStringAsync(new Uri(url));

                     //throw:
                     //WebClient does not support concurrent I/O operations.
                });

                client.DownloadStringCompleted += (s, ea) =>
                {
                     //Do something
                };
H.B.
  • 166,899
  • 29
  • 327
  • 400
christiangobo
  • 520
  • 1
  • 7
  • 19

1 Answers1

1

You're using a shared WebClient instance and the timer is obviously causing more than one download to occur at a time. Spin up a new client instance each time in the Tick handler or disable the timer so it won't tick again while you're still handling the current download.

timer.Tick += new EventHandler(delegate(object p, EventArgs a)
{
    // Disable the timer so there won't be another tick causing an overlapped request
    timer.IsEnabled = false;

    client.DownloadStringAsync(new Uri(url));                     
});

client.DownloadStringCompleted += (s, ea) =>
{
    // Re-enable the timer
    timer.IsEnabled = true;

    //Do something                
};
Drew Marsh
  • 33,111
  • 3
  • 82
  • 100