TIdHTTP: Abbruch?



  • Hallo, ich habe ein Problem mit der TIdHTTP-Komponente: Wenn ich einen Download starte und er ziemlich lange dauert, möchte ich natürlich abbrechen... Download:

    TFileStream* fs=new TFileStream("File",fmCreate);
                http->Get("Host",fs);
                delete fs;
    

    Der Download funktioniert einwandfrei, aber wie breche ich den Download ab? Ich hab das bisher so gelöst:

    http->DisconnectSocket();
    

    Aber da bekomme ich immer die Meldung "Connection Closed Gracefully". Wie breche ich also den Download ab, ohne diese Meldung zu bekommen?

    - Windoof



  • Mal mit catch(...) probiert?



  • "Connection Closed Gracefully" ist hier keine Fehlermeldung, sondern eine Bestätigung, dass die Verbindung sauber getrennt wurde. Siehe dazu auch die Erläuterungen auf der Indy-Webseite.

    Wie von nirsaja schon angedeutet musst du die Exception einfach mit try/catch abfangen. Allerdings besser nicht mit (...), sondern gezielt als EIdConnClosedGracefully (oder wie immer der konkrete Name lautet).



  • Also ich habs einmal mit ... und einmal so probiert:

    try
        {
            http->DisconnectSocket();
        }
        catch(EIdConnClosedGracefully &c)
        {
            Application->MessageBox("Download has been canceled.","MusicLoader",64);
        }
    

    Bei beiden malen kam nur wieder diese Meldung "Connection closed gracefully." Aber wie bekomme ich diese Meldung weg?



  • Dass Exceptions beim Start aus der IDE heraus trotzdem angezeigt werden, das wurde hier schon so oft diskutiert, dass eigentlich auch du das hättest mitbekommen sollen. 😉
    Start dein Program mal ausserhalb der IDE.


  • Mod

    Hallo

    hast du es schonmal mit ... versucht
    oder
    kommt die Meldung "nur" in der IDE oder auch wenn du die Exe aufrufst

    MfG
    Klaus



  • Ja, auch, wenn ich die EXE so aufrufe... lieber Jansen, denk nicht immer, dass ich dumm bin, ich weiß selber, dass ich in der IDE alle Exceptions angezeigt bekomme. bei ... kommt genau das Gleiche.



  • EDIT: Sorry wegen Doppelpost, euer Server reagiert grad bei mir etwas lahmarschig 😉



  • Solch eine sch...öne MessageBox hatte ich bei einem Programm auch, ich glaube die wurde von TClientSocket verursacht. Die störte zwar in meinem Fall nicht den Programmablauf, war aber extrem lästig und nicht weg zu bekommen. Wollte irgendwann ne eigene Kompo auf Basis von Winsock schreiben, nur blieb es bisher bei dem Willen. Andere Dinge waren wieder einmal extrem wichtiger 😉



  • Windoof schrieb:

    ich weiß selber, dass ich in der IDE alle Exceptions angezeigt bekomme

    Warum weist du dann nicht darauf hin, dass du diesen Umstand bereits berücksichtigt hast? Warum weist du nicht darauf hin, dass der catch-Zweig offenbar gar nicht erreicht wird und deine eigene MessageBox nicht angezeigt wird?
    http://www.lugbz.org/documents/smart-questions_de.html

    Davon abgesehen habe ich Probeme, das Problem nachzuvollziehen. Bei mir wird auch ohne try/catch die Exception nur innerhalb der IDE geworfen.
    In der Hilfe wird darauf hingewiesen, dass EIdConnClosedGracefully von EIdSilentException abstammt und sich somit ähnlich wie EAbort aus der VCL verhält. Zitat: "Abort is the exception class for errors that should not display an error message dialog box."

    Na und genau das macht EIdConnClosedGracefully hier auch, es zeigt (beim Start ausserhalb der IDE) keine Meldung.

    PS. Indy 9.00.14



  • Ja, und wie bekomme ich die Meldung jetzt weg? Sie ist nämlich, wie jemand schon andeutete, sehr lästig.


Log in to reply