Backgroundworker Abbruch

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 78 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    @VaporiZed
    " indem man bei FormClosing den Zähler wieder auf 0 setzt " <== Ich glaube das war es was mich zu der Annahme brachte das der Timer nicht angehalten wird. Später soll die Statusbar und das Label einfach nur den Kopiervortschritt anzeigen.

    Ich hatte angenommen, das der Zähler ja bei jedem Aufruf der frm_copy auf 0 NULL gesetzt wird???

    @RodFromGermany
    Der Timer1 dienst wie geschrieben nur als Test Ersatz für den BGW, den ich aber wohl verwerfen werde und mit " Async & Await " das ganze machen werde.
    Dabei habe ich aber festgestellt, das ich neue "Hürden" bekomme. z.B. das frm_copy so zu öffnen.
    Das mit dem Using war meine erster Versuch.

    Bin gerade dabei das ganze nochmals zu überdenken.
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    Ich hatte angenommen, das der Zähler ja bei jedem Aufruf der frm_copy auf 0 NULL gesetzt wird???
    Das ist ja auch richtig. Aber das Anzeigeupdate des Zählers (will heißen, dass der Zählerwert im Label erscheint) erfolgt ja erst nach dem ersten Timer-Tick wieder. Daher die Verzögerung.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @RodFromGermany
    @VaporiZed

    Frage zum Projekt.
    Mein Projekt soll eine Auswahl von Dateien kopieren und ggf zippen.
    Die Ausgabe soll ähnlich dem Explorer kopieren sein. Eingaben etc mache ich über OpenBrowse / OpenFile Dialog

    Was ist besser und warum?
    1.) Backgrundworker
    2.) Async/Await
    3.) andere Möglichkeiten .... ....
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    BGW: Stand von vor 10 Jahren
    Async/Await: aktueller Stand der Dinge
    anderes fällt mir aufgrund der nicht-Notwendigkeit dank Async/Await nicht ein
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Amelie schrieb:

    Frage zum Projekt.
    Mein Projekt soll eine Auswahl von Dateien kopieren und ggf zippen.
    Die Ausgabe soll ähnlich dem Explorer kopieren sein. Eingaben etc mache ich über OpenBrowse / OpenFile Dialog
    Das ist nicht klar genug formuliert für eine Projekt-Planung.
    • "kopieren und ggf zippen"
      Wann soll es kopieren, wann soll es zippen, wer oder was legt wie fest, was passieren soll?
    • "Die Ausgabe soll ähnlich dem Explorer kopieren sein"
      mein Explorer hat gar keine Ausgabe. Der Explorer zeigt Dateien und Ordner an, und wenner kopiert, dann kopiert er.
      Eine Ausgabe hat er nicht.
    @ErfinderDesRades

    Der Benutzer ( Ich ) lege fest ob und wann kopiert / gezippt wird.
    Wenn ich im Windows Explorer etwas kopiere oder zippe, popt ein Fenster mit Angaben, Progressbar etc ( für mich sind das Ausgaben ) auf.
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    @Amelie Von wie vielen Dateien bzw. Verzeichnissen reden wir?
    Wieoft findet das statt?
    Kopieren von wo nach wo?
    Zippen von wo nach wo?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany

    Deine Frage ist schwer zu beantworten. Ist alles sehr verschieden.
    Mal ist es ein Verzeichnis mit einigen 100 Dateien und mal kann das wöchendlich sein mal öfters.
    Meist von einer Festplatte zu einer anderen.

    Wenn es für den ZipDialg vom Windows....
    Das hier gäbe, könnte ich mir ja einiges ersparen: (obgleich das hässlich ist) :D
    UIOption.AllDialogs, UICancelOption.DoNothing

    VB.NET-Quellcode

    1. My.Computer.FileSystem.CopyDirectory(mstrSource, mstrTargetdir, UIOption.AllDialogs, UICancelOption.DoNothing)
    2. ......
    3. IO.Directory.CreateDirectory(mstrTargetdir)
    4. ZipFile.CreateFromDirectory(mstrSource, mstrTargetdir & ".zip", CompressionLevel.Optimal, False)
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    Wenn es für den ZipDialg vom Windows....
    Dann musst Du das halt organisieren.
    Mach Dir so was wie eine Makrosprache:
    Quelle;Ziel;Optionen;...
    für jede einzelne Operation in einer Textdatei, da läuft das Aufräumen dann von allein.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi

    @Amelie: Wenn Du etwas machen möchtest wie es der Explorer macht, dann musst Du auch die entsprechenden Interfaces und Funktionen dafür verwenden.

    Für den Explorer ist kopieren oder zippen das gleiche. Ob du nun einen Ordner mit Dateien auf einen Datenträger, in einen anderen Ordner oder in einen komprimierten Ordner haben möchtest, wird im Endeffekt nur von Quelle zu Ziel kopiert. Das Ziel entscheidet was dann wie gemacht wird. Aber darum musst Du Dich nicht kümmern. Das ist Aufgabe von der verwendeten Schnittstelle IFileOperation.

    Mit IFileOperation arbeitest Du so wie der Explorer (inkl. eines Fortschrittdialogs mit der Möglichkeit die laufende Operation abzubrechen und entsprechenden Events). Wenn Du nun eine Quelle als Zip (komprimierter Ordner) haben möchtest und die Zip existiert noch nicht, dann schreib selbst den Zip-Header auf die Platte und fertig ist ein leerer komprimierter Ordner den Du als Ziel für das kopieren verwenden kannst.

    Einziger Nachteil des ganzen, du kannst keine Stärke für die Zip-Komprimierung oder ein Passwort für die Zip vergebenen. Ok, geht beim Explorer auch nicht wen man dort eine Quelle in was auch immer kopiert.
    Mfg -Franky-
    @RodFromGermany
    Ich kann dir gerade mit den TXT-Dateien nicht folgen....
    -----
    @-Franky-
    Ich gugg mir das nochmal genauer an.. mit dem IFileOperation, wobei wie ich zippen kann, das habe ich ja.
    Es geht mehr darum das zippen / kopieren sichtbar zu machen und um BGW oder Async ... um das Tool nicht komplett einfrieren zu lassen.. ;)
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Hi

    Wie bereits geschrieben. Ein Fortschrittdialog und Events sind beim IFileOperation inklusive. Kann sein das das kopieren über IFileOperation sowieso schon in einen anderen Thread läuft. Wenn nicht, dann verlagerst halt die eigentliche Operation von IFileOperation in einen anderen Thread.
    Mfg -Franky-
    @-Franky-

    Meist du dieses?

    VB.NET-Quellcode

    1. My.Computer.FileSystem.CopyDirectory(Quelle, Ziel, UIOption.AllDialogs, UICancelOption.DoNothing)

    Wenn ja, dann habe ich das fürs "zippen" nicht gefunden.
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    @Amelie In einer Textdatei legst Du für jede Kopier-Operation eine Zeile mit Informationen an.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi

    @Amelie: Nein. Das ist es nicht. Das ist eine Klasse im .Net- Framework. Ob diese Klasse das gleich verwendet wie das was ich meine, weis ich gerade nicht. Müsste man sich in einem Reflektor anschauen.

    Das was ich meine ist das Interface IFileOperation (docs.microsoft.com/en-us/windo…bjidl_core-ifileoperation) Man kann in .Net auch direkt mit Interfaces arbeiten. Ist zwar etwas größerer Programmieraufwand, am Ende lohnt es sich aber mal über den Tellerrand des .Net- Frameworks hinaus zu schauen.
    Mfg -Franky-
    @-Franky-
    Wenn ich das richtig verstehe, muss ich erst noch etwas installieren, da ich ja mit WIndows7 64bit arbeite.

    @RodFromGermany
    Kann dir noch immer nicht folgen...
    Hast du mal ein Beispiel was du meinst.
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    -Franky- schrieb:

    das Interface gibt es erst ab WinVista. Das wird dann so mit meinem Vorschlag nichts unter Win7.
    Das klingt aber widersprüchlich. Wenn ich mich entsinne kam WinVista vor Win7. Und wenn es das Interface ab Vista gab, müsste es ja auch in Win7 geben, oder?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hi

    Huch. Das passiert wenn man zwischen Tür und Angel noch fix was postet. ;) Du hast natürlich recht @VaporiZed. Jetzt wo Du es sagst, mein Testcode dazu ist vor ca. 5 Jahren auch noch unter Win7 mit VB6 entstanden. Für .NET müsste ich das erst neu programmieren.

    @Amelie: Dann musst auch nix extra installieren. Interface IFileOperation + zusätzlich benötigte Interfaces + ein paar APIs reinprogrammieren und testen.
    Mfg -Franky-