Frage

Ich brauche ein Thread haben ein anderes Signal, wenn der Benutzer die Ausführung zu unterbrechen möchte jedoch über Ich bin nicht sicher, wie die Signalisierung / Signal-Prüfmechanismus zu implementieren. Ich möchte nicht einen Singleton in meinem Projekt haben (wie eine globale bool), aber gibt es eine Alternative?

dieses Thema Menschen legen nahe, geeignete Strukturen für den in C ++, aber ich weiß nicht, etwas ähnliches in .NET. Könnte jemand bitte etwas Licht?

War es hilfreich?

Lösung

Versuchen Sie Background . Es unterstützt Fortschritte Updates und Löschung einer laufenden Task.

Wenn Sie einen Thread warten, bis ein anderer Thread seine Sache tut beendet hat, dann Monitor.Wait und Monitor.Pulse sind gut, wie Manual. Diese sind jedoch nicht wirklich von Nutzen für eine laufende Aufgabe abgebrochen wird.

Wenn Sie Ihre eigene Stornierung Code schreiben, könnten Sie nur ein Feld irgendwo haben, die beide Threads Zugriff haben. Mark es flüchtig, z.

private volatile bool cancelling;

Haben Sie den Haupt-Thread es auf true gesetzt, und haben die Arbeiter-Thread es in regelmäßigen Abständen überprüfen und es auf false gesetzt, wenn es fertig ist.

Das ist nicht wirklich vergleichbar einer ‚globalen Variablen‘ zu haben, wie Sie noch den Umfang der Semaphor Variable begrenzen kann zu einer Klasse privat sein.

Andere Tipps

Ein bisschen vage (kurze Zeit), aber schauen Sie in Manual und Autoreset . Sie könnten auch sehen Monitor- und Schloss Schlüsselwort möchten.

Schauen Sie in Monitor.Wait und Monitor.Pulse. Hier ist ein ausgezeichneter Artikel über Threading in .Net (sehr gut lesbar): http: //www.albahari .com / Einfädeln / part4.aspx

Eine einfache Lösung, wie eine synchronisierte statische boolean, sollte alles, was Sie brauchen, um zu einem Rahmen-basierte Lösung gegenüber, die für Ihr Szenario zu viel des Guten copuld. Falls Sie noch einen Rahmen, einen Blick auf die parallel Erweiterungen für Ideen .NET .

Es hängt davon ab, welche Art der Synchronisation Sie benötigen. Wenn Sie in der Lage sein wollen Thread in einer Schleife, bis eine Art Ende der Ausführung laufen erreicht ist - alles, was Sie brauchen, ist eine statische Bool Variable. Wenn Sie einen Thread wollen, bis ein anderer Thread warten, um einen Punkt in der Ausführung erreichen möchten Sie vielleicht WaitEvents (Autoreset oder Manual) verwenden. Iflyyou müssen für mehrere waithandles warten Sie WaitHandle.WaitAll oder WaitHandle.WaitAny verwenden können.

Sehen Sie sich die System.Runtime.Remoting Namespace.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top