Ich habe ein Programm, das den Quellcode analysiert. Es kann rekursiv durch ein Verzeichnis gehen, um alle Projekte zu finden, und dann rekursiv durch das Projekt gehen, um den gesamten Quellcode zu finden.Erstellen eines Stornierungsschemas
Ich möchte eine Schaltfläche zum Abbrechen des Prozesses erstellen, die es dem Benutzer ermöglicht, die Codeanalyse zu stoppen. Ich führe die Code-Analyse in einem Hintergrund-Worker aus. Ich möchte in der Lage sein, auf das Absage-Ereignis zu achten.
Das Problem ist herauszufinden, wie Sie meinen Code bearbeiten, so dass es gehen und überprüfen Sie das Element und zurück zur GUI zurückkehren. Der Analyseprozess geht mehrere Methoden tief.
In einem viel kleineren Prozess verwende ich erfolgreich ein threadsicheres Singleton mit einem Bool, das angibt, ob ein Abbruch angefordert wurde oder nicht, und die Schleife dort anhalten, wo sie ausgeführt wird.
Was wäre der beste Weg, um diese Anfrage in meinen Code zu bearbeiten?
EDIT: Hier ist eine Idee, inspiriert von John Saunders 'Antwort.
Was passiert, wenn ich einen Hintergrund-Thread in meinem Verarbeitungsthread ausführen, der auf die Änderung von Singleton Cancel achtet und dann eine Ausnahme von diesem Prozess auslöst? Scheint dies eine gute Praxis?
Dies funktioniert nicht wie vorgesehen
EDIT 2: John Saunders 'Antwort scheint die beste für jetzt zu sein. Ich werde nur meine eigene Ausnahme werfen, wenn der Singleton für jetzt wahr ist. Ich werde warten, um zu sehen, ob andere Lösungen vorgeschlagen werden
Ich habe nicht einmal gedacht, eine Ausnahme zu werfen! –
Ausnahmen und mehrere Threads sind ein Problem in den Hintern zu debuggen --- im Allgemeinen: Vorsicht. Der Debugger + mehrere Threads = nicht dein Freund. –
Ich habe darüber gesprochen, die Ausnahme in seinen eigenen Thread zu werfen. Es würde an der Grenze gefangen werden und nicht entkommen. Beachten Sie, dass dies teilweise was Thread.Abort tut (es wirft ThreadAbortException, denke ich). Aber auf diese Weise wird es nur geworfen, wenn es sicher ist. –