none
Progress Balken und Applikation "friert" ein RRS feed

  • Frage

  • Hallo Zusammen,

    ich würde diese beiden Fragen gerne in einem Thread stellen. (aufgrund der "Verwandschaft")

    1) Ist es möglich einen Fortschrittsbalken spezifisch für einen Programmfall zu definieren? Konkret: Ich lese zuerst mehrere GByte an textdateien (oder vergleichbar) ein. Schreibe diese dann nach durchlaufen eines Filters in eine zweite. Aus dieser werden bestimmte zeilen in einer bestimmten Reiehnfolge herausgegriffen und sortiert, inhalte verrechnet und in eine .csv Datei geschrieben.

    Wunsch: Einen Progressbalken für den kompletten Vorgang. Von ersten Einlesen bis zum Schreiben in die .csv Datei.

    2) Hierbei arbeite ich mit einem Window, auf welchem je nach angewähltem "Button" sprich Menüpunkt ein anderes UserControl-Element verwendet. Dieses Fenster friert nach drücken des "Start" Buttons (sprich bei Verarbeitungsstart) ein. In diesem Fenster würde ich auch gerne den Balken anzeigen lassen und dieses immernoch "bewegen" können.

    Vielen Dank schoneinmal für eventuelle Lösungsvorschläge und Denkansätze.

    Mit freundlichen Grüßen

    Dienstag, 28. Juli 2015 12:05

Antworten

  • Hi,
    ein Fortschrittsbalken benötigt immer eine Dreisatzrechnung. Wesentlich dabei ist der Zielwert und der aktuelle Wert. Diese musst Du von Deinem Algorithmus ableiten können. Deine Beschreibung lässt vermuten, dass da keine Zeitwerte bestimmbar sind (wie lange dauert beispielsweise das Einlesen der GByte), weshalb auch der Zielwert als Zeitwert nicht ermittelt werden kann. Alternativ kann man als Zielwert die Gesamtzahl der Schritte nutzen, wenn diese zum Startzeitpunkt ermittelbar sind. Beschreibe mal, wie Du diesen Zielwert ermittelst.

    Zu 2. ist zu vermuten, dass Du die Verarbeitung im Haupt-Thread ausführst und damit für das Refresh der Oberfläche keine CPU-Zeit zur Verfügung steht. Wenn das so ist, dann arbeite mit Threading.


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort markiert Bonexy Dienstag, 28. Juli 2015 13:41
    Dienstag, 28. Juli 2015 12:20

Alle Antworten

  • Hi,
    ein Fortschrittsbalken benötigt immer eine Dreisatzrechnung. Wesentlich dabei ist der Zielwert und der aktuelle Wert. Diese musst Du von Deinem Algorithmus ableiten können. Deine Beschreibung lässt vermuten, dass da keine Zeitwerte bestimmbar sind (wie lange dauert beispielsweise das Einlesen der GByte), weshalb auch der Zielwert als Zeitwert nicht ermittelt werden kann. Alternativ kann man als Zielwert die Gesamtzahl der Schritte nutzen, wenn diese zum Startzeitpunkt ermittelbar sind. Beschreibe mal, wie Du diesen Zielwert ermittelst.

    Zu 2. ist zu vermuten, dass Du die Verarbeitung im Haupt-Thread ausführst und damit für das Refresh der Oberfläche keine CPU-Zeit zur Verfügung steht. Wenn das so ist, dann arbeite mit Threading.


    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort markiert Bonexy Dienstag, 28. Juli 2015 13:41
    Dienstag, 28. Juli 2015 12:20
  • Hallo Peter,

    Meine Zielwerte hängen stark von der Anzahl an ausgewählten Dateien aus.

    Für den ersten Zwischenschritt:

    Da alle Datein nacheinander eingelesen werden und (gefiltert) in eine Textdatei geschrieben werden nach dem Muster:

    Liste von Dateien

    -> 1. Element  zeilenweise einlesen -> zeilen Filtern -> in Datei schreiben

    -> 2. Element zeilenweise einlesen -> Zeilen Filtern -> in Datei schreiben

    .... -> letztes Element zeilenweise einlesen -> Zeilen Filtern -> in Datei schreiben

    D.h hier könnte der Zielwert (ich hoffe ich habe das mit diesem Wert richtig verstanden) über die Anzahl an Dateien * 3 (also der "zwischenschritte") erfolgen.

    Für den zweiten Teil:

    Die Dateien wurden vorher in Kategorieren unterteilt. (bei der Filterung)Diese werden wieder nacheinander eingelesen , verarbeitet und in eine Datei geschrieben.

    Sprich hier könnte ein Wert sein: Anzahl_Kategorien * Arbeitsschritte

    Ich habe die obere Antwort als solche markiert, da sie einen großteil der Fragen grundlegen Beantwortet. Bzgl. Threadings werde ich mich informieren. Falls du mir dort eine Informationsquelle empfehlen könntest, wäre ich sehr dankbar.

    Mfg.

    Edit: Ein Zeitwert ist primär nicht ganz so wichtig. Ein prozentualer Wert wäre allerdings unumgänglich für die Anwendung / Benutzerfreundlichkeit.

    Edit2: Wäre es eventuell auch sinnvoll Multithreading für die Verarbeitung selbst zu verwenden? Um den gesamten Vorgang zu beschleunigen. Sprich z.B. die DateiListe zu anfang /2 Teilen und dann diese Liste parallel verarbeiten. --> könnte aber eventuell Probleme mit den Dateizugriffen ergeben.

    • Bearbeitet Bonexy Dienstag, 28. Juli 2015 13:51
    Dienstag, 28. Juli 2015 13:41