Timer gesteuerte Aktion - kein Zugriff auf Controls

  • VB.NET

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

    Timer gesteuerte Aktion - kein Zugriff auf Controls

    Hallo,

    ich habe ein Projekt bei dem ich Timer gesteuert diverse Aktionen ausführen lasse.
    Ich verwende dafür die "ScheduleLib" hier aus dem Forum.

    Bisher hatte ich im Projekt 2 zeitgesteuerte Aufgaben, jetzt sollte eine dritte dazu kommen.

    Seit dem ich die dritte Aufgabe implementiert habe kann ich keine Controls mehr steuern.

    Ich habe das ganze mal vereinfacht in einem neuen Projekt dargestellt.
    Auf der Form habe ich eine Textbox, deren Text ich auslesen wollte, ein Label das ich ein- und ausblenden wollte und einen Button mit dem ich die Aufgabenplanung starte.

    Form1.vb:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Friend TestVar As String = "Test-Variable, sollte sich ändern nach dem ersten Tick von Timer1"
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. 'keyboard.Show()
    5. Debug.WriteLine("Starte Timer 1")
    6. Call Module1.Init_1()
    7. Threading.Thread.Sleep(3000)
    8. Debug.WriteLine("Starte Timer 2")
    9. Call Module1.Init_2()
    10. Threading.Thread.Sleep(3000)
    11. Debug.WriteLine("Starte Timer 3")
    12. Call Module1.Init_3()
    13. End Sub
    14. End Class


    Module1.vb:

    VB.NET-Quellcode

    1. Module Module1
    2. Friend WithEvents Scheduler1 As ScheduleLib.Scheduler
    3. Friend WithEvents Scheduler2 As ScheduleLib.Scheduler
    4. Friend WithEvents Scheduler3 As ScheduleLib.Scheduler
    5. Friend Sub Init_1()
    6. If IsNothing(Scheduler1) Then
    7. Scheduler1 = New ScheduleLib.Scheduler(Now.Date.AddHours(24))
    8. AddHandler Scheduler1.Tick, AddressOf Scheduler1Tick
    9. Call Set_Timer_1()
    10. End If
    11. End Sub
    12. Friend Sub Init_2()
    13. If IsNothing(Scheduler2) Then
    14. Scheduler2 = New ScheduleLib.Scheduler(Now.Date.AddHours(24))
    15. AddHandler Scheduler2.Tick, AddressOf Scheduler2Tick
    16. Call Set_Timer_2()
    17. End If
    18. End Sub
    19. Friend Sub Init_3()
    20. If IsNothing(Scheduler3) Then
    21. Scheduler3 = New ScheduleLib.Scheduler(Now.Date.AddHours(24))
    22. AddHandler Scheduler3.Tick, AddressOf Scheduler3Tick
    23. Call Set_Timer_3()
    24. End If
    25. End Sub
    26. Private Sub Set_Timer_1()
    27. Scheduler1.ChangeDate(Now.AddSeconds(12))
    28. End Sub
    29. Private Sub Set_Timer_2()
    30. Scheduler2.ChangeDate(Now.AddSeconds(12))
    31. End Sub
    32. Private Sub Set_Timer_3()
    33. Scheduler3.ChangeDate(Now.AddSeconds(12))
    34. End Sub
    35. '#################### TICKS ####################
    36. Public Sub Scheduler1Tick()
    37. Debug.WriteLine("Nummer 1 hat getickt: " & Form1.TestVar)
    38. Scheduler1.ChangeDate(Now.AddSeconds(12))
    39. Form1.Label1.Visible = Not Form1.Label1.Visible
    40. Form1.TestVar = "Geänderter Inhalt der TestVar"
    41. End Sub
    42. Public Sub Scheduler2Tick()
    43. Debug.WriteLine("Nummer 2 hat getickt: " & Form1.TextBox1.Text)
    44. Scheduler2.ChangeDate(Now.AddSeconds(12))
    45. Form1.Label1.Visible = Not Form1.Label1.Visible
    46. End Sub
    47. Public Sub Scheduler3Tick()
    48. Debug.WriteLine("Nummer 3 hat getickt: " & Form1.TextBox1.Text)
    49. Scheduler3.ChangeDate(Now.AddSeconds(12))
    50. Form1.Label1.Visible = Not Form1.Label1.Visible
    51. End Sub
    52. End Module


    Im Debugfenster wird jetzt nur das angezeigt was beim Starten in der Textbox1 bereits steht. Jegliche Änderung darin wird nicht übernommen.
    Auch das Label, das zum testen ein- und ausgeblendet werden soll bleibt eingeblendet.

    Wo ist mein Fehler? ?(

    Danke

    Montoyafan schrieb:

    Wo ist mein Fehler?
    Du denkst in VB6, Du musst in Instanzen denken!
    Aus nem Modul kannst Du nicht auf ne Form zugreifen.
    Verstehe diesen Thread:
    Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    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!