|
| Autor |
Nachricht |
Tyrannmisu Newbie

Anmeldedatum: 17.03.2011 Beiträge: 8
|
Mehrere Backgroundworker erstellen
Verfasst am: 17.03.2011, 13:03 |
|
|
Hallo erst mal alle zusammen
Also ich programmier schon seit ein paar Jahren Hobbymäßig in VB.Net (früher auch VB6), weiß aber auch vieles noch nicht und entdecke immer wieder was neues.
Zur Zeit schreibe ich ein kleines Backup Programm, dort kann man mehrere Aufträge hinterlegen welche das Programm das ausführt, z.B.:
Job1 Datei jede Minute kopieren
Job2 Datei kopieren wenn Hashwert ungleich
Job3 Datei kopieren wenn Änderungsdatum ungleich
Job1 hat ja sowieso einen festen Zeitwert
und Job2 und 3 werden in einer festgelegten Zeit immer mal wieder überprüft (im Falle meiner Testeinstellung vorerst jede Minute).
Bisher hab ich die Behandlung so gelöst:
Die Jobs stehen in einer ArrayList und werden über einen Timer behandelt, im Timer selbst befindet sich eine Schleife welche die Jobs im Array bearbeitet, bzw. überprüft ob es denn schon ander Zeit ist den Kopierauftrag auszuführen oder die Bedinung zu checken.
Das klappt an sich, aber wenn jetzt mal eine größere Datei kopiert wird, welche länger als eine Minute braucht, werden die anderen Jobs auch erst wieder abgefragt/gestartet wenn der Vorgang fertig ist, das ist eigentlich etwas unschön.
Also hab ich mir jetzt überlegt für jeden Job einen eigenen Worker zu erstellen, nach ein wenig Recherche habe ich herausgefunden, dass man sowas gut mit backgroundworkern machen kann.
Also will ich jetzt für jeden Job einen eigenen Backgroundworker erstellen und daran scheiterts im Moment.
Habe bisher folgeden Code:
| Code: | | Dim MyBGW() As System.ComponentModel.BackgroundWorker |
Die backgroundworker sollen erstellt und gestartet werden, indem man auf einen Button klickt:
| Code: |
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Job As ListBox
workeractive = True
For Each Job In Jobarray
Dim workcount As Integer = Job.Items.Item(1)
If Job.Items.Item(0) = "X" Then
MyBGW(workcount) = New System.ComponentModel.BackgroundWorker
MyBGW(workcount).WorkerSupportsCancellation = True
AddHandler MyBGW(workcount).DoWork, AddressOf MyBGW_DoWork
AddHandler MyBGW(workcount).RunWorkerCompleted, AddressOf MyBGW_RunWorkerCompleted
MyBGW(workcount).RunWorkerAsync(Job)
End If
Next
end sub
|
Da ist aber schon was faul, denn ich kriege in der Zeile:
| Code: | | MyBGW(workcount) = New System.ComponentModel.BackgroundWorker |
den Fehler: NullReferenceEcexeption wurde nicht behandelt : Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
Mit einem festem backgroundworker hab ich es schon zum laufen bekommen, aber das möchte ich eigentlich nicht.
Wäre für Hilfe sehr dankbar !
Edit:
Okay habs herausgefunden, muss | Code: | | Dim MyBGW(workcount) As BackgroundWorker |
hinzufügen jetzt habe ich zwar weitere Probleme aber erst mal gucken, wenn hier jemand trotzdem sieht, dass was falsch ist oder besser sein könnte dann ruhig schreiben  |
|
| |
|
 |
|
|