Abhängigkeiten von Backgroundworker

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von DniBo.

    Abhängigkeiten von Backgroundworker

    Hallo zusammen,

    ich bin gerade an einem Projekt am arbeiten zu dem bereits ein Beitrag extistiert (aber andere Richtung) :)

    Über eine Klasse lese ich die Festplatte in einem Backgroundworker aus und schreibe die gefundenen Dateien in eine Listbox. Nun muss ich diese Dateien noch öffnen und ein File auslesen, soweit noch alles klar.

    Um das Form zu entlasten, liefert mir der erste Backgroundworker die Fileliste, ein zweiter Backgroundworker soll dann diese Liste (aus der Listbox) abarbeiten und die Files auslesen.

    Um bei rund 20 Millionen Files ein Abbruch zwischen drinn zu vermeiden, wie muss ich die beiden Backgroundworker abgleichen das der zweite Backgroundworker nicht abbricht wenn der erste Backgroundworker gerade keine Files nach meinem Muster findet und somit eine Zeit lang keine Filenamen liefert?

    Muss ich was beachten?

    Würde das gerne im Vorfeld abklären und ggf mein Code anpassen.

    Vielen Dank für Eure Infos,
    Dani

    DniBo schrieb:

    Über eine Klasse lese ich die Festplatte in einem Backgroundworker aus und schreibe die gefundenen Dateien in eine Listbox. Nun muss ich diese Dateien noch öffnen und ein File auslesen, soweit noch alles klar.

    mir ist nix klar: Du liest in einem Backgroundworker Dateien in eine Listbox? 20 Millionen? Wer soll sich so eine Listbox angucken?
    Kommt da nicht eine Exception wg. unzulässieger Threadübergreifender Zugriffe?

    DniBo schrieb:

    Nun muss ich diese Dateien noch öffnen und ein File auslesen, ...
    wie jetzt: erst liest du die Dateien in eine Listbox, und dann musst du die Dateien öffnen, und ein File (englisch: Datei) auslesen?
    Also eine Datei aus einer Datei auslesen?
    du meinst also wen der 1ste oder der 2ste bgworker nix mehr zutun hat weil der 1 oder 2 bgworker noch nicht soweit ist das der 1ste oder 2ste backgroundworker nicht einfach aufhört.ehmm oder so dan pack es doch in 1 bgworker ehmmm
    @Sinlyu:
    1., 2., 3. - das ist deutsch.
    1st, 2nd, 3rd - das ist englisch.
    1ste oder 2ste - das ist Sinlyu, kenn ich nicht.

    @TE:
    Oder anders herum:
    Wenn Du mit dem 1. BGW einen File gefunden hast, starte an dieser Stelle einen 2. BGW. Bei einem weiteren den 3. usw. Die BGW hören auf zu esixtieren, wenn sie ihre Arbeit vollbracht haben.
    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!
    PseudoCode:

    Quellcode

    1. Array von Threads
    2. Array von dateien
    3. Backgroundworker tu:
    4. (
    5. lese datei ein
    6. füge datei zu dateien hinzu
    7. starte neuen thread mit dateiname
    8. gehe weiter
    9. )
    10. thread tu:
    11. (
    12. tu was immer du willst mit der datei
    13. )
    Hi ErfinderDesRades,

    Du hast schon Recht, die Treffer in eine Listbox einzutragen macht keinen Sinn, was ich gerade am schrieben bin ist auch nicht das End-Tool sondern ich bin ja erst mal am schreiben des FileZugriff mit Umgehung des Framework um auch Pfad/Dateien grösser 248/258 Zeichen bearbeiten/lesen zu können,

    Daher erst mal diese "Testvariante" bis das ganze komplett klappt und liefert, was ich will.

    Dann sieht das Endprodukt sicher anderst aus.

    Übrigens scheint sich die Listbox durchaus kräftig zu verschlucken wenn ich per Event die Treffer aus der Prozedur mit FindNextFile liefere, da friert das Form ein (trotz DoEvent) und ein StackOverflow bekomme ich auch, also so wie Du eh schon vermutet hast :)

    Meine Absicht war das der erste Backgroundworker die Fileeinträge ausliest (also quasi Dir), diese an eine Datensammlung übergibt und der zweite Backgroundworker diese Datensammlung ausliest und weitere Aktionen durchführt, aber sich nicht daran stören darf wenn BGW1 gerade mal nichts liefert/findet.

    Das war der Hintergrund meiner frage :)

    Gruss,
    Dani
    Hi zusammen,

    ist eine Überlegung aus Design-Gründen. Während der erste BGW alle "Treffer" erfasst und damit auch die Anzahl der durchzuarbeitenden Files liefert, soll der zweite BGW quasi die Arbeit erledigen.

    War eben eine Design-Frage, nicht mehr und nicht weniger.

    Am besten wir vergessen diesen Beitrag :)

    Viele Grüsse,
    Dani