2011-05-26 6 views
0

мне нужна помощь с этим кодомDispatcherTimer и WebClient.DownloadStringAsync бросить «WebClient не поддерживает операции параллельного ввода/вывода» исключение

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 
       }; 

ответ

1

Вы используете общий WebClient экземпляр и таймер, очевидно, вызывает более одна загрузка происходит одновременно. Сдвиньте новый экземпляр клиента каждый раз в обработчике Tick или отключите таймер, чтобы он не стал тикать снова, пока вы все еще обрабатываете текущую загрузку.

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     
}; 
+0

Спасибо, что работает для меня! – christiangobo