В верхней части формы1 я сделал:
WebClient Client;
Тогда в конструкторе:
Client = new WebClient();
Client.DownloadFileCompleted += Client_DownloadFileCompleted;
Client.DownloadProgressChanged += Client_DownloadProgressChanged;
Затем у меня есть этот метод, который я вызываю каждую минуту:
private void fileDownloadRadar()
{
if (Client.IsBusy == true)
{
Client.CancelAsync();
}
else
{
Client.DownloadProgressChanged += Client_DownloadProgressChanged;
Client.DownloadFileAsync(myUri, combinedTemp);
}
}
Каждые минуты он каждый раз загружает изображение с сайта на одно и то же изображение. Все это работало более 24 часов без каких-либо проблем, пока не выбрасывает это исключение в завершении загрузки:
private void Client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
if (e.Error != null)
{
timer1.Stop();
span = new TimeSpan(0, (int)numericUpDown1.Value, 0);
label21.Text = span.ToString(@"mm\:ss");
timer3.Start();
}
else if (!e.Cancelled)
{
label19.ForeColor = Color.Green;
label19.Text = "חיבור האינטרנט והאתר תקינים";
label19.Visible = true;
timer3.Stop();
if (timer1.Enabled != true)
{
if (BeginDownload == true)
{
timer1.Start();
}
}
bool fileok = Bad_File_Testing(combinedTemp);
if (fileok == true)
{
File1 = new Bitmap(combinedTemp);
bool compared = ComparingImages(File1);
if (compared == false)
{
DirectoryInfo dir1 = new DirectoryInfo(sf);
FileInfo[] fi = dir1.GetFiles("*.gif");
last_file = fi[fi.Length - 1].FullName;
string lastFileNumber = last_file.Substring(82, 6);
int lastNumber = int.Parse(lastFileNumber);
lastNumber++;
string newFileName = string.Format("radar{0:D6}.gif", lastNumber);
identicalFilesComparison = File_Utility.File_Comparison(combinedTemp, last_file);
if (identicalFilesComparison == false)
{
string newfile = Path.Combine(sf, newFileName);
File.Copy(combinedTemp, newfile);
LastFileIsEmpty();
}
}
if (checkBox2.Checked)
{
simdownloads.SimulateDownloadRadar();
}
}
else
{
File.Delete(combinedTemp);
}
File1.Dispose();
}
}
Теперь он остановился внутри if (e.Error!= null) На строке: timer1.Stop();
Затем я вижу на ошибке ошибку: Это трассировка стека:
at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.Net.WebClient.GetWebResponse(WebRequest request, IAsyncResult result)
at System.Net.WebClient.DownloadBitsResponseCallback(IAsyncResult result)
Как я могу решить эту проблему, чтобы это не повторилось? И почему это произошло?
EDIT:
Я попытался изменить метод fileDownloadRadar на это, чтобы каждый раз выпускать клиент:
private void fileDownloadRadar()
{
using (WebClient client = new WebClient())
{
if (client.IsBusy == true)
{
client.CancelAsync();
}
else
{
client.DownloadFileAsync(myUri, combinedTemp);
}
}
}
Проблема заключается в том, что в конструкторе я использую Client и здесь он клиенту две разные переменные Webclient.
Как я могу решить эту проблему и исключение?
Это чернила websitel для сайта с изображением, которое я скачиваю каждую минуту. Еще не уверен, почему я получил это исключение после того, как он работал без проблем более 24 часов. Теперь я снова запустил программу снова, и она работает, но я задаюсь вопросом, не получу ли это исключение снова, или иногда в следующие часы.