DLL Fortschritt in Progressbar anzeigen

  • VB.NET
  • .NET 4.5

SSL ist deaktiviert! Aktivieren Sie SSL für diese Sitzung, um eine sichere Verbindung herzustellen.

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Trade.

    Ja kannst du, dazu muss ich aber wissen, ob die DLL dir auch iwie den Fortschritt mitteilt. Denn ohne Info, wie weit der Prozess ist, kannst du auch nix ausrechnen.
    Sag uns am besten erstmal:

    - Welche DLL (und welche Version davon) du nutzt.
    - Welchen Typ von Projekt du selber schreibst (WPF, WinForms, Framework-Version)
    - Welches Ziel du damit erreichen willst
    - Wie du den Aufruf bisher implementiert hast (also deinen Source-Code)

    Dann können wir dir auch besser weiterhelfen ;)

    felix schrieb:

    Tut sie nicht. Sie gibt am Ende nur 1 für Erfolg oder 0 für Fehler zurück

    Ja gut, dann kannst du das vergessen - wenn du keine Möglichkeit hast, die DLL zu bearbeiten, dann wird das nichts. Ich würde dann nur ne ProgressBar nehmen, die auf Style.Marquee setzen. Die Funktion rufst du dann in einem seperaten Thread / Task auf, wenn du sie startest, starte die PB; wenn die Funktion fertig ist, dann stoppe sie.
    Wenn dir die DLL keine Möglichkeit bietet um den Fortschritt anzuzeigen, dann kannst du
    1. mit Multithreading arbeiten
    2. ein Control haben, dass einen Prozess veranschaulicht, ohne einen Fortschritt anzuzeigen. Möglichkeiten wären zum Beispiel eine Ladeanimation, eine Progressbar mit Marquee-Style oder ein simples Label, dass "Bitte Warten..." anzeigt.

    Ansonsten gibt es keine wirklich funktionierende Möglichkeit. Die Backgroundworker-Vorgehensweise halte ich für schlecht gelöst, denn erstmal ist der Backgroundworker imho eine schlechte Threading-Variante(zumal Threading nicht schwer anzuwenden ist) und dann wird der dir wahrscheinlich auch keinen richtigen Fortschritt zurückgeben. Habs aber nie ausprobiert.

    LG

    Edit:

    Mokki schrieb:

    Naja du weist ja das es zum Verarbeiten ca. 5,2 sek braucht ev nen Timer dann sieht es wenigstens danach aus....

    Mit Timern herumzuhantieren halte ich für Thema verfehlt. Denn:
    1. Jeder PC braucht unterschiedlich lang zum Abarbeiten der Vorgänge, da unterschiedliche Hardware und unterschiedliche Auslastung durch andere Prozesse
    2. Ein Timer, der alle 5,2s tickt prüft nach 5,2s ob der Vorgang fertig ist, oder wie? Das ist imho Fehldesign, denn der Timer tickt dann erst wieder in 5,2s aber der Vorgang kann schon in der nächsten Millisekunde fertig sein. Ergo könnte dem User 5,2s angezeigt werden, dass das Programm immernoch am rumwerkeln ist, aber es in Wirklichkeit damit schon lange fertig ist
    3. Multithreading ist bei sowas einfach besser geeignet, als ein Timer. Bspw kann man den Thread ein Event raisen lassen wenn er mit dem Prozess anfängt und wenn er fertig ist ebenfalls ein Event raisen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ChOoSeMyNaMe“ ()

    felix schrieb:

    Sie gibt am Ende nur 1 für Erfolg oder 0 für Fehler zurück.

    Du nutzt (VB).NET, nicht C(++), also passe das Ganze auch konform an. Davon abgesehen gibt es ja sogar in C++ entsprechende Typedefs. Aber so ist das in .NET normal nicht üblich. Dafür gibt es Boolean.

    Und Fortschritt kannst Du über mehrere Wege erreichen. Notwendig ist allerdings, dass das Ganze asynchron abläuft. Dann kannste am Besten mit TAP und IProgress(Of T) ran.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Fragen per PN, denn dafür ist das Forum da :!:
    Ja, habe aber verpeilt, dass es nicht seine DLL ist. Man müsste natürlich richtig lesen. Dann ist das natürlich was anderes.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Fragen per PN, denn dafür ist das Forum da :!: