Backgroundworker Macht nicht das was er soll....

  • VB.NET

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

    Backgroundworker Macht nicht das was er soll....

    Hallo.

    ich denke mal bild und code sagen mehr wie tausen worte.


    VB.NET-Quellcode

    1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    2. BackgroundWorker1.RunWorkerAsync()
    3. End Sub
    4. Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    5. wc.Credentials = New Net.NetworkCredential(benutzername, passwort)
    6. Lichtc.Text = wc.DownloadString("Ftp://zimmersteuerung.1x.de/www/Lichtc.txt") 'ACHTUNG ! AUF GROß UND
    7. wc.Credentials = New Net.NetworkCredential(benutzername, passwort)
    8. Showsc.Text = wc.DownloadString("Ftp://zimmersteuerung.1x.de/www/Showsc.txt") 'ACHTUNG ! AUF GROß UND
    9. If Lichtc.Text = "0" Then
    10. Label1.Text = "Licht ist aus"
    11. End If
    12. If Lichtc.Text = "1" Then
    13. Label1.Text = "Licht ist an"
    14. End If
    15. If Showsc.Text = "1" Then
    16. Label2.Text = "Show ist an"
    17. Button1.Enabled = False
    18. End If
    19. If Showsc.Text = "0" Then
    20. Label2.Text = "Show ist aus"
    21. Button1.Enabled = True
    22. End If
    23. End Sub


    Hat jemand eine Idee?
    Bilder
    • fdfdfdff.JPG

      66,75 kB, 898×362, 137 mal angesehen
    jetzt geht das. aber dafür habe ich ein neues Problem:


    VB.NET-Quellcode

    1. private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. BackgroundWorker1.RunWorkerAsync()
    3. End Sub
    4. Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    5. wc.Credentials = New Net.NetworkCredential(benutzername, passwort)
    6. Lichtc.Text = wc.DownloadString("Ftp://zimmersteuerung.1x.de/www/Lichtc.txt") 'ACHTUNG ! AUF GROß UND
    7. Showsc.Text = wc.DownloadString("Ftp://zimmersteuerung.1x.de/www/Showsc.txt") 'ACHTUNG ! AUF GROß UND
    8. If Lichtc.Text = "0" Then
    9. Me.Invoke(Sub() Label1.Text = "Licht ist aus")
    10. End If
    11. If Lichtc.Text = "1" Then
    12. Me.Invoke(Sub() Label1.Text = "Licht ist an")
    13. End If
    14. If Showsc.Text = "1" Then
    15. Me.Invoke(Sub() Label2.Text = "Show ist an")
    16. Me.Invoke(Sub() Button1.Enabled = False)
    17. End If
    18. If Showsc.Text = "0" Then
    19. Me.Invoke(Sub() Label2.Text = "Show ist aus")
    20. Me.Invoke(Sub() Button1.Enabled = True)
    21. End If
    22. wc.Credentials = New Net.NetworkCredential(benutzername, passwort)
    23. wc.UploadString("Ftp://zimmersteuerung.1x.de/www/Shows.txt", Shows.Text)
    24. wc.UploadString("Ftp://zimmersteuerung.1x.de/www/Licht.txt", Licht.Text)
    25. BackgroundWorker1.RunWorkerAsync()
    26. End Sub
    27. End Class
    Bilder
    • ddddddddd.JPG

      54,71 kB, 812×414, 126 mal angesehen
    Was denkst Du selber, was Du da machst?

    Ich hab Dir oben schon gesagt, dass Du Dir mal die Async-Methoden anguggen sollst. Dann kannst Du Dir das ganze gerammel mit dem BackgroundWorker nämlich sparen.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    WTF?
    Warum neustarten?
    Eine Endlosschleife würde es auch tun.
    Hier ein paar zusätzliche Infos zum BGW: [VB.NET] Multithreading mit BackgroundWorker
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Wäre das nicht ein Fall für einen Timer?
    Ich meine gut kann es doch nicht sein mit dem Abfrageinterval ans Maximum zu gehen und am Ende nur ein Label zu verändern... Da würden 10 Abfragen pro Sekunde doch locker ausreichen.
    @FreakJNS: Ja, das wäre sicher keine schlechte Idee. Man müsste aber aufpassen, dass man den Code nicht mehrmals gleichzeitig ausführt.
    Also mit 'nem BGW wäre es sowas in der Richtung:

    VB.NET-Quellcode

    1. Sub TimerTick() Handles Timer.Tick
    2. If Not BGW.IsBusy Then
    3. BGW.RunWorkerAsync()
    4. End If
    5. End Sub
    Dadurch wird der Code erst erneut gestartet, sobald er zu Ende gelaufen ist.

    Edit: Besser wäre wahrscheinlich noch, beim Starten des BGWs den Timer zu stoppen und beim Fertiglaufen des BGWs den Timer wieder zu starten.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    @Niko Ortner: Wie bei einem normalen Thread würde ich den BGW genau einmal starten und dann in der Thread-Routine DoWork() eine Endlosschleife mit sinnvoller Abbruchbedingung implementieren: Task-Ende und Programm-Ende.
    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!