#c# #multithreading #concurrency #dispatchertimer
#c# #многопоточность #параллелизм #dispatchertimer
Вопрос:
Мне нужна помощь с этим кодом
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
};