![]() |
idHttp.Get kann Exception nicht abfangen!
Hi NG.
Delphi 4 (update 3), Indy 9.
Delphi-Quellcode:
Leider funktioniert dieser Code nicht, dh. bei nicht erreichbarer URL (404) wird das Programm nicht beendet.
try
idHTTP.Get(sUrl, ms); except Application.Terminate; end; Ist die URL erreichbar funktioniert alles tadelos. Kann mir jemand einen Tipp geben? Gruß Peter |
Re: idHttp.Get kann Exception nicht abfangen!
wenn du es so hart killen willst könntest du auch "TerminateProcess" verwenden. Das ist so ziemlich die gemeinste Art und weise dem Prozess gegenüber diesen zu killen (Prozess ist machtlos).
|
Re: idHttp.Get kann Exception nicht abfangen!
Hm, es muss doch eine Möglichkeit geben bei einer 404-Exception das Programm normal zu beenden und nicht eine Fehlermeldung seitens Indy zu erhalten.
|
Re: idHttp.Get kann Exception nicht abfangen!
theoretich sollte das auch funktionieen. Jedoch weiß ich nicht welche Rahmenbedingungen außerhalb des geposteten Sources existieren die das beeinflussen. Und wenn es dir wirklich nur ums beenden des programmes geht kannst du ja auch die "HauDrauf"-Methode mit TerminateProcess verwenden.
|
Re: idHttp.Get kann Exception nicht abfangen!
Ich denke nicht, dass TerminateProcess die optimale Lösung ist.
Ich möchte eigentlich, dass die Anzeige der Exception komplett unterdrückt wird und nicht angezeigt und dann durch eine TerminateProcess gekillt wird. Noch einen Rat parat? |
Re: idHttp.Get kann Exception nicht abfangen!
mit Try-Except, Try-Finally kannst du die Fehlermeldung auch unterdrücken. Vermutlich führst du dein Programm aber aus Delphi heraus aus und hast in den debugger-optionen "Stop on Delphi-Exceptions" aktiviert (was standardmäßig der fall ist). Delphi spuckt dir also eine Fehlermeldung aus, fährt dann aber in der Behandlung entsprechend Try-Except/Try-Finally fort.
|
Re: idHttp.Get kann Exception nicht abfangen!
:lol: Das ist tatsächlich der Fall. Wenn ich das Programm außerhalb der IDE ausführe, wird keine Fehlermeldung ausgespuckt.
Andererseits führt das Application.Terminate aber auch nciht dazu, dass die Anwendung geshclossen wird, sondern es wird anschließend munter weiter im Quelltext fortgefahren. Woran kann das nun liegen? Ich dachte Application.Terminate wäre das ultimative Mittel, um die eigene Anwendung zu schließen. Peter |
Re: idHttp.Get kann Exception nicht abfangen!
das ultimative Mittel hab ich bereits gepostet. Application.Terminate beendet so weit ich weiß nur die Nachrichtenschleife des Hauptthreads. Ist also noch eine "nette" variante. Alternativ kannst du auch noch "halt" verwenden. Das ist nicht ganz so hart wie "TerminateProcess" aber ein ganzes stück effiezenter wenn man ein Programm beenden will.
Allerdings denke ich das es nicht die richtige Herangehensweise ist ein Programm bei einem Fehler einfach zu schließen. Und wenn du das doch unbedingt willst weiß ich nicht was gegen TerminateProcess spricht. Schließlich willst du das Programm ja auf jeden fall beenden was damit sichergestellt wäre. Vielleicht solltest du mal erleutern was du genau vor hast. Einmal willst du deine Anwendung beenden und das andere mal eine Exception abfangen. Wenn du das eigentliche Ziel mal beschreibst findet sich vielleicht ein besserer Weg dort hinn. |
Re: idHttp.Get kann Exception nicht abfangen!
Zitat:
|
Re: idHttp.Get kann Exception nicht abfangen!
Ok, dann erzähl ich mal ein bisken.
Mit HTTP.Get(sUrl, MemStream) möchte ich - bei Erreichbarkeit - eine CSV-Datei einlesen, die ich anschließend auswerte. Wenn ich keine Daten erhalten kann, möchte ich das Programm an dieser Stelle beenden, da sowieso nichts mehr passiert. |
Re: idHttp.Get kann Exception nicht abfangen!
So, ein kleines Update.
Mir hat inzwischen in einem anderen Forum jemand zur Lösung verholfen.
Delphi-Quellcode:
EXIT hat gefehlt.
try
idHTTP.Get(sUrl, ms); except Application.Terminate; Exit; end; Es wundert mich aber schon, dass Application.Terminate nicht ausreicht die Anwendung zu beenden. Verzichte aber auf appTerminate und nehme nur EXIT, verbleibt das Program auch im Speicher. Weiß jemand woran das liegen könnte? Wird das Problem evtl von der Indy-Komponente idHTTP verursacht? Gruß Peter |
Re: idHttp.Get kann Exception nicht abfangen!
Zitat:
|
Re: idHttp.Get kann Exception nicht abfangen!
Nee das Problem ist das ein Terminate "nur" einen Befehl in die MessageQue legt...
Also erst wenn diese abgearbeitet wird kann der Befehlt auch ausgeführt werden und das passiert erst außerhalb... Frank |
Re: idHttp.Get kann Exception nicht abfangen!
Und warum reicht kein Close?
|
Re: idHttp.Get kann Exception nicht abfangen!
Genau das frage ich mich auch.
|
Re: idHttp.Get kann Exception nicht abfangen!
Weil Close auch nur einen Befehl in die Que legt...
Frank |
Re: idHttp.Get kann Exception nicht abfangen!
Womit wir wieder bei der grundlegenden Frage sind: Warum funktioniert das Application.Terminate nur in Verbindung mit EXIT. bzw. warum reicht sonst das Terminate aus?
|
Re: idHttp.Get kann Exception nicht abfangen!
da hilft wohl nur das man mal einen Blick in die Quelltexte wirft. Vielleicht liegt es auch noch an der Delphiversion und der Bug ist in neueren Versionen inzwischen behoben (denn mir ist sowas noch nicht untergekommen, allerdings nutze ich auch nicht solche "haudrauf"-Methoden).
|
Re: idHttp.Get kann Exception nicht abfangen!
Ne habe ich doch gesagt...
Der Exit bringt dich zurück in die Haupt Application.Run Schleife und NUR in dieser Schleife wird die Que abgearbeitet... Daher auch an vielen stellen im Progamm - um z.B. den Bildschirm in einer liniaren Routiene upzudaten - immer Application.Processmessages aufrufen... Frank :thumb: |
Re: idHttp.Get kann Exception nicht abfangen!
Dh alternativ zu EXIT könnte ich auch Application.Processmessages aufrufen?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz