Abbrechen von Funktionen während der Laufzeit



  • Hi! Vielleicht kann mir jemand dabei helfen meinen Quellcode zu ergänzen:

    private void button6_Click(object sender, System.EventArgs e)
    {
       bool bedingung = true;
        Cancel(bedingung);			
    }
    
    public bool Cancel(bool bedingung)
    {
       if (bedingung == true)
       {
          MessageBox.Show("Aktion abgebrochen");
          //hier sollte jetzt der Teil meiner Funktion stehen, der eine andere
          //Funktion während der Laufzeit beendet. (per return?) Im Prinzip wie  
          //ein'CANCEL'-Button.
       }
       return false;
    }
    

    Gibt es für sowas Methoden die angeboten werden? Wenn nicht, wie muss ich meinen Quellcode ändern?
    Wäre super wenn mir da jemand helfen könnte!

    Thx @ll



  • Was ist das für eine andere Funktion? Läuft sie in einem Thread, oder ist das nur eine einfache Schleife?



  • Eine andere Funktion beenden?

    Geht nicht.

    Du kannst aber einen anderen Thread beenden.

    erklaer mal genauer was du machen willst. 2 Funktionen koennen nicht gleichzeitig laufen (das geht nur mit Threads)



  • Die 2te Funktion macht eigentlich nichts Anderes als Ordner nach *.txt Dateien zu durchsuchen, die *.txt Dateien zu öffnen und in ein Array zu lesen. Im Array stehen dann Pfade zu Bildern (Aus den txt Dateien), bei denen dann überprüft wird ob diese Bilder noch vorhanden oder schon gelöscht sind. Da dieser Vorgang bei mir Stunden dauert, weil es sich um sehr viele Bild- und Textdateien handelt möchte ich diese Funktion abbrechen können.



  • Die Frage ist, wie du die andere Funktion aufrufst. Denn 2 Funktionen koennen nicht ohne weiteres parallel laufen.

    Ist es ein Thread?



  • Shade Of Mine schrieb:

    2 Funktionen koennen nicht gleichzeitig laufen (das geht nur mit Threads)

    Stimmt mit einer Ausnahme. Er macht ein Button Klick (button6_Click) und das kann auch ausgeführt werden, während eine andere Funktion längere Berechnung z.b. durchführt oder in einer Schleife was macht. Diese Funktion muss nur ab und zu etwas Prozessorzeit freigeben.

    C#-mässig mit: Application.DoEvents();



  • Ja. Aber die Funktionen laufen nicht parallel. Cancel() läuft nur, wenn man den Abbrechen-Button betätigt.



  • Wenn das ein Thread ist, dann muss du denn Thread beenden und in der Funktion immer abfragen, ob der Thread noch "lebt", ist es nicht so, dann funktion mit z.b. return verlassen



  • Danke auf jeden Fall, aber wie mach ich das? Ich programmier in C# unter .NET erst seit 3 Stunden. Hab bisher nur Delphi Erfahrung.



  • das überarbeitete Bsp aus der .NET-Hilfe:
    !!! nicht getestet, nur um zeigen, wie es ungefähr abläuft.

    using System;
    using System.Threading;
    
    public class ThreadWork 
    {
       ThreadStart myThreadDelegate = new ThreadStart(DoWork);
       Thread myThread = new Thread(myThreadDelegate);
    
       public void DoWork()
       {
          while(myThread.IsAlive)  // <======= "lebt" noch?
          {
             Console.WriteLine("Working thread...");
                Thread.Sleep(100);
          }
       }
    
       public static void Main()
       {
          myThread.Start();  // starten
             for(int i = 0; i<30; i++)
             {
             Console.WriteLine("In main.");
                Thread.Sleep(100);
             }
          myThread.Abort(); // beenden
       }
    }
    


  • Das könnte hinhauen! Ich danke dir!



  • Madman_y2k,
    die "klassische" Art, eine Funktion von außen abzubrechen, ist einfach die Verwendung einer Abbruch-Variable - nennen wir sie "Abort".

    public bool Abort;
    
    void TXTFunction()
    {
        Abort = false;
        while ((Abort == false) && (...))
        { 
        // Tu was ...
        }
    }
    
    private void button6_Click(object sender, System.EventArgs e) 
    { 
       Abort = true
    }
    

Log in to reply