In der Spitze form1 ich tat:Warum bekomme ich eine Ausnahme: Zu viele automatische Umleitungen wurden auf dem Webclient versucht?
WebClient Client;
Dann im Konstruktor:
Client = new WebClient();
Client.DownloadFileCompleted += Client_DownloadFileCompleted;
Client.DownloadProgressChanged += Client_DownloadProgressChanged;
Dann habe ich diese Methode Ich rufe jede Minute:
private void fileDownloadRadar()
{
if (Client.IsBusy == true)
{
Client.CancelAsync();
}
else
{
Client.DownloadProgressChanged += Client_DownloadProgressChanged;
Client.DownloadFileAsync(myUri, combinedTemp);
}
}
Jede Minute es wird jedes Mal ein Bild von einer Website heruntergeladen. Es funktioniert alles für mehr als 24 Stunden keine Probleme unbis diese Ausnahme in dem Download-Vorgang abgeschlossen Ereignis zu werfen:
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();
}
}
Jetzt hielt es innerhalb des if (e.Error! = Null) Auf der Linie: timer1 .Halt();
Dann sehe ich auf dem Fehler den Fehler: Dies ist der Stack-Trace:
at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.Net.WebClient.GetWebResponse(WebRequest request, IAsyncResult result)
at System.Net.WebClient.DownloadBitsResponseCallback(IAsyncResult result)
Wie kann ich dieses Problem lösen, damit es nicht wieder passieren wird? Und warum ist es passiert?
EDIT:
Ich versuchte, die fileDownloadRadar Methode, dies zu ändern, dem Kunden jedes Mal freizugeben:
private void fileDownloadRadar()
{
using (WebClient client = new WebClient())
{
if (client.IsBusy == true)
{
client.CancelAsync();
}
else
{
client.DownloadFileAsync(myUri, combinedTemp);
}
}
}
Das Problem ist, dass ich Kunden im Konstruktor bin mit und hier ist es Client zwei verschiedene Webclient-Variablen.
Wie kann ich dies und die Ausnahme lösen?
Dies ist die Websitel Tinte für die Website mit dem Bild, das ich jede Minute herunterladen werde. Immer noch nicht sicher, warum ich diese Ausnahme bekam, nachdem es mehr als 24 Stunden keine Probleme hatte. Nun habe ich das Programm nochmal ausgeführt und es funktioniert, aber ich frage mich, ob ich diese Ausnahme morgen oder in den nächsten Stunden wieder bekomme.
The site with image i'm downloading
meine Frage aktualisiert. Ich versuche, Using mit dem Webclient zu verwenden, aber nicht sicher, dass dies die Lösung für die Ausnahme ist. Und das zweite Problem ist die Verwendung von Using, da ich jetzt zwei verschiedene WebClient-Variablen habe und das ist falsch. –
Der von Ihnen beschriebene Fehler hat nichts mit 'using' zu tun. Wenn Sie eine einzelne "WebClient" -Instanz auf Klassenebene verwenden möchten, sollten Sie in Ihrer Download-Methode keine 'using'-Anweisung verwenden. Hast du meine Antwort gelesen? –