Backgroundworker Daten übergeben

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von hal2000.

    Backgroundworker Daten übergeben

    Hallo

    Ich habe wieder einmal ein Problem mit dem Backgroundworker.
    Da ich in einem Programm einen großen Haufen Berechnungen durchzuführen habe, und aber gleichzeitig am aktiven Programmm arbeiten möchte, habe ich die Berechnungen mit Hilfe von einem Backgroundworker in einen neuen Prozess gebracht, damit sie so im Hintergrund ausgeführt werden.

    Da ich aber zu den Berechnungen natürlich eine Menge Eingaben, z.B. aus Textboxen, aus der Programm-Form benötige, muss ich diese dem Backgroundworker irgendwie übermitteln. Direkt auslesen kann er sie ja nicht, da dieser auf einem anderen Prozess läuft.

    Meine derzeitige und einzige Lösung, die mir einfällt, ist, dass die Daten vor dem Starten des Backgroundworkers in eine Textdatei gespeichert werden, und diese zu Beginn vom neuen Prozess ausgelesen werden.

    Genauso ist es umgekehrt auch. Da die einzelne Ergebnisse der Berechnungen in Echtzeit angezeigt werden sollen (Anzahl der Durchgeführten Berechnungen, Prozentanteil, Welcher Schritt ist gerade in Bearbeitung, ...), werden diese Daten regelmäßig vom Backgroundworker-Prozess in eine Textdatei gespeichert und durch einen Timer wird diese Textdatei vom aktivem Programm jede Sekunde ausgelesen.

    Meine Frage nun, ob man dies eleganter machen könnte, und vor allem wie?
    Meine Lösung mit Textdateien die regelmäßig geschrieben und ausgelesen werden finde ich ziehmlich unelegant.

    Danke für eure Bemühungen im Voraus
    Piakob

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

    Der BackgroundWorker nimmt Daten an und kann auch welche zurückgeben. Dafür ist der Paramerter "state" (As Object) gedacht. Erstelle eine Klasse "DataObject", die alle relevanten Member enthält, die der BGW zum Arbeiten benötigt. Eine befüllte Instanz übergibst du an RunWorkerAsync(), abrufen kannst du sie im Arbeitssthread über den e-Parameter des Ereignisses. Das Ergebnis schreibst du in e.Result, welches du im Ereignis RunWorkerCompleted im e-Parameter wiederfindest und threadsicher verwenden kannst.

    Beispiel: msdn.microsoft.com/de-de/libra…del.backgroundworker.aspx
    Gruß
    hal2000