3 Stimmen

Nicht-kooperative Annullierung eines asynchronen Vorgangs

In meiner Windows-Form-Anwendung muss ich eine lang laufende Operation einer mathematischen Bibliothek eines Drittanbieters (Accord.NET) aufrufen. Während der Berechnung möchte ich meine grafische Benutzeroberfläche reaktionsfähig halten und dem Benutzer die Möglichkeit geben, die lang laufende Operation abzubrechen.

Gibt es eine Möglichkeit, diese Funktion in einem Hintergrund-Thread auszuführen und dem Benutzer die Möglichkeit zu geben, sie abzubrechen? Beachten Sie, dass die langlaufende Funktion, die ich aufrufen möchte, in einer externen Bibliothek liegt und keine CancellationToken (sonst könnte ich einfach ThreadPool 's QueueUserWorkItem zum Beispiel). Ich suche also nach einer Möglichkeit, den Vorgang nicht kooperativ abzubrechen.

3voto

NotMe Punkte 86089

Ich würde sagen, Sie haben drei Möglichkeiten.

Erstens: Machen Sie aus der Berechnung einen eigenen Thread. Dadurch bleibt die Benutzeroberfläche reaktionsschnell. Anstelle einer Schaltfläche "Abbrechen", lassen Sie den Benutzer wissen, dass die Aktion, die sie im Begriff sind, zu nehmen, nicht gestoppt werden kann, sobald gestarrt.

Zweitens: Machen Sie aus der Berechnung einen eigenen Thread, wie oben beschrieben; allerdings, so tun, als ob abzubrechen, indem Sie einfach die Priorität des Threads herabsetzen. Sie können die Berechnung weiterlaufen lassen, aber den Fortschritt nicht mehr in Ihrem Hauptthread melden. Wenn es fertig ist, werfen Sie einfach die Ergebnisse weg.

Drittens: Legen Sie die Berechnung in eine eigene Anwendungsdomäne/einen eigenen Prozess. Falls gewünscht, beenden Sie diesen externen Prozess.


Es gibt gute und schlechte Dinge an jedem von ihnen.

1voto

ChrisB Punkte 129

Hm? Verwenden Sie einfach einen Thread und eine Worker-Methode.

Thread thread = new Thread(MyWorkerMethod);
thread.Start();

thread.Abort();

void MyWorkerMethod() {
    // do anything you want in here
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X