Laden...

Ausführung im Hintergrund mit gleichzeitigem Loggerfenster und Progressbar

Erstellt von Viper2000 vor 14 Jahren Letzter Beitrag vor 14 Jahren 925 Views
V
Viper2000 Themenstarter:in
63 Beiträge seit 2008
vor 14 Jahren
Ausführung im Hintergrund mit gleichzeitigem Loggerfenster und Progressbar

Hallo Forum,

weiß nicht wie ich diese Frage sonst formulieren soll. 😃
Ich schreibe eine Applikation bei der über eine externe DLL ein Gerät angesteuert wird was dann diverse Tests ausführt und die Ergebnisse zurückmeldet.

Das funktioniert jetzt auch alles schon sehr gut. Allerdings alles im GUI Thread.

Ich habe mir eine Basisklasse "Tests" erstellt, die alle "gemeinsamen" Felder und Methoden enthält. diese Klasse enthält eine abstrakte Methode "Start()".

Für jeden denkbaren Test habe ich je eine Klasse erstellt die dann von der Basisklasse "Tests" abgeleitet ist. Diese abgeleiteten Klassen überschreiben jeweils die abstarkte Methode "Start()" der Basisklasse mit "override". Diese override Methode stößt die reale Testausführung an.

Ich würde nun gerne in meinem Hauptform Objekte dieser speziellen Tests instanzieren und Nacheinander im Hintergrund abarbeiten lassen. Dazu soll der Fortschritt in einem Fenster was beim Starten der Tests aufpoppt dargestellt werden. Zum einen als Progressbar und zum anderen als "Loggerbereich"(TextBox) wo Textmeldungen über den Fortschritt ausgegeben werden. Ich muss also aus meiner Instanz des Tests auf dieses Form irgendiwe zugruiff erhalten um die Progressbar und die TextBox zu aktualisieren.

Wie kann ich das sauber in eine .NET Technologie wie "Backgroundworker" oder halt in Threads auslagern?

Also nochmal zusammenfassend:

  1. Haupform erzeugt Objekte der speziellen Tests, jedes Objekt enthält die Methode Start() die den eigentlichen Test startet (über DLL auf einem USB Gerät).

  2. Nach Aufruf der Start() Methode soll die ganze Geschichte im "Hintergrund" ablaufen ohne das Mainform zu blockieren.

  3. Während des Ablaufes soll in einem zusätzlichen Form der Fortschritt über eine TextBox und eine Progressbar ersichtlich sein.

Über Hilfe dazu wäre ich sehr dankbar.

Viele Grüße

998 Beiträge seit 2007
vor 14 Jahren

Wie du bereits geschrieben hast ist der Backgroundworker die einfachste Alternative. Dein Updaten der Textbox kannst du entweder im Eventhandler von progressChanged machen oder du invokest einen Delegaten aus deiner Testklasse heraus, in dem der Text der Textbox geupdatet wird.

Gruß David

V
Viper2000 Themenstarter:in
63 Beiträge seit 2008
vor 14 Jahren

Ok aber wo wäre der richtige Ort um den Backgroundworker zu starten? Im Mainform oder im Objekt meiner abgeleiteten Klasse oder in dem zusätzlichen Form das ich für die Fortschrittsanzeige nutzen will...

Und wie bekomme ich die Textstrings die ich in meiner Klasse dann von dem USB Gerät "zurückbekomme" in den Eventhandler rein um diese in die Form zu bringen?

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo Viper2000,

alles was du wissen musst, steht in [FAQ] Warum blockiert mein GUI? und [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke)

herbivore