An welchem ​​Punkt in einem Windows Form-Schließvorgang werden die Steuerelemente ungültig?

StackOverflow https://stackoverflow.com/questions/1729152

  •  19-09-2019
  •  | 
  •  

Frage

Ich habe kürzlich einige Kursarbeiten für einige Bachelor-Studenten erstellt, für die sie eine kleine und relativ einfache C#-Bibliothek verwenden müssen, die ihnen zur Verfügung gestellt wird.Der Hauptzweck dieser Bibliothek besteht darin, ein einfaches Formular anzuzeigen, das aus einem farbigen Raster (das manipulieren kann), einer Reihe von Schaltflächen und einer Beschriftung mit etwas Text besteht.

Die von ihnen erweiterte Klasse stellt eine Reihe abstrakter Methoden bereit, die sie implementieren müssen. Eine davon heißt UpdateAction und wird automatisch in festgelegten Intervallen aufgerufen.

Ich bin selbst nicht auf das folgende Problem gestoßen, aber in den Laboren haben einige Studenten festgestellt, dass beim Schließen ihres Formulars eine zeitweilige InvalidOperationException aus ihrer UpdateAction-Methode ausgelöst wird.Die Fehlermeldung ist der Fehler, den ich normalerweise erwarten würde, wenn Sie versuchen, die Benutzeroberfläche von einem anderen Thread aus zu ändern, aber es gibt nur doppelte Anführungszeichen '' wo normalerweise der Name der fehlerhaften Kontrolle angezeigt wird.
Sollte dies weiterhin ein Problem sein, müssen wir ihnen eine korrigierte Version der Bibliothek erneut zur Verfügung stellen, obwohl wir bereits erklärt haben, dass dieser Fehler keinerlei Auswirkungen auf die Kennzeichnung ihrer Arbeit hat (da es sich offenbar um einen Fehler in unserem Code handelt). .

Soweit ich das beurteilen kann, müssen die Schüler das Formular zu einem Zeitpunkt schließen, an dem das Update ausgeführt wird und die von ihnen geänderten Steuerelemente gelöscht werden, bevor der Update-Thread gestoppt wird, d. h.Es scheint, dass die Steuerelemente null geworden sind.Das Merkwürdige daran ist, wie sporadisch es auftritt. Einige Schüler hatten das Problem noch nie, während andere es ständig hatten.Ich bin während der Entwicklung der Modelllösungen für die Kursarbeit oder bei der Entwicklung der Bibliothek selbst nie persönlich darauf gestoßen.

Meine Frage ist also, an welchem ​​Punkt im Lebenszyklus eines Formulars die darauf befindlichen Steuerelemente entsorgt werden und wo wäre es daher am besten, den Code zu platzieren, der den Aktualisierungsthread stoppt?Derzeit befindet sich dieser Code in der Forms-Dispose-Methode. Wäre er besser woanders platziert?

War es hilfreich?

Lösung

Wie stoppen Sie den Thread?Sind Sie sicher, dass es stoppt, bevor Sie das Fenster schließen?Sie sollten sicherstellen, dass Sie es stoppen, indem Sie ein Flag in der Thread-Schleife setzen.Anschließend müssen Sie warten, bis der Thread beendet wird.

Faden

while (running)
{
    // thread stuff
}

Bilden

thread.running = false; // or use your own Stop() method that does the same thing
thread.Join();

Wenn Sie ein reaktionsfähiges System wünschen, müssen Sie sicherstellen, dass der Thread innerhalb kurzer Zeit nach Erhalt des Stoppsignals beendet werden kann.

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