Operation in Thread abbrechen



  • Hallo!

    Ich lade mehrere XML Dateien in einen XmlTextReader von verschiedenen URLs und werte den Inhalt danach aus. Um dem Benutzer zu erlauben die Operation abzubrechen will ich diese Funktion in einen zweiten Thread auslagern. Die Einzeloperation, die dabei am längsten dauert ist sicherlich das Laden der XML Datei aus dem Internet. Die Frage ist nun, wie kann ich dem Benutzer erlauben die gesamte Sache zu jedem Zeitpunkt abbzubrechen? Bis jetzt sieht alles (vereinfacht) so aus:

    foreach (string s in URLs) {
        if (Cancel)
            return;
        XmlTextReader reader = new XmlTextReader(s);
        ReadXmlContents(reader);
    }
    

    Im Moment kann der User zwar zu jeder Zeit den Abbrechen Button drücken und damit Cancel auf true setzen, jedoch wird die Operation erst beim nächsten Durchlauf unterbrochen. Gibt es einen Weg das Abbrechen zu jedem Zeitpunkt zu erlauben (z.B. während die XML Datei geladen wird)?

    Danke schon mal im Voraus!



  • Datei laden kannst du abbrechen, indem das Socket einfach schließt. Dann kriegst ne IOException oder sowas, die fängst du und wenn cancel true ist, war es so beabsichtigt und ist kein Fehler.
    Wenn das Parsen auch länger dauert, musst du wohl während dem Parsen immer wieder prüfen. Außerdem kann man bei einem Thread noch ne Exception von außen auslösen, die den Thread-Abbruch bewirken soll. Ich weiß nicht mehr genau, wie, musst nachlesen. Is aber nicht so gut, weil man da verflixt aufpassen muss, dass du nicht undefiniert irgendwas verändert hast und dann der Thread abraucht. Manche Arbeiten dürfen halt einfach nicht unterbrochen werden.



  • Danke für die Hilfe! Ich habe mich jetzt ein bisschen tiefer in die Thread Klasse eingegraben und habe die Methode Abort() gefunden, diese löst die von dir angesprochene Exception aus und beendet den Thread sofort.


Anmelden zum Antworten