Klasse, Thread und Timer

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von woeh.

    Klasse, Thread und Timer

    hallo :)

    ich lasse einen thread starten.

    VB.NET-Quellcode

    1. Private Sub CheckUpdate(ByVal waitForUser As Boolean, askUser As Boolean)
    2. Dim th As Threading.Thread
    3. Dim cUpdate As New clsUpdate(waitForUser, askUser)
    4. th = New Threading.Thread(AddressOf cUpdate.DownloadStart)
    5. th.TrySetApartmentState(Threading.ApartmentState.STA)
    6. th.IsBackground = True
    7. th.Priority = Threading.ThreadPriority.Normal
    8. th.Start()
    9. End Sub



    in der Klasse des Threads beende ich dann einen Timer. Klappt alles.

    beim beenden der Klasse möchte ich den Timer wieder aus dem Thread heraus starten.
    das klappt leider nicht.

    VB.NET-Quellcode

    1. Private Sub ClientDownloadStringCompleted(ByVal sender As Object, ByVal e As Net.DownloadStringCompletedEventArgs)
    2. ...
    3. ...
    4. mainform.tmrUpdate.Interval = 1000 * 10
    5. mainform.tmrUpdate.Enabled = True
    6. End Sub


    kann mir jmd helfen ?

    woeh schrieb:

    beim beenden der Klasse
    was meinst Du damit? Eine Klasse kann weder gestartet noch beendet werden. Eine Klasse ist ein Bauplan eines Objektes.

    woeh schrieb:

    das klappt leider nicht.
    Was passiert denn konktret? Da kommt doch nicht etwa eine Mitteilung, dass threadübergreifende Prozesse verboten sind?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @woeh Poste einen Code, der Deinen Effekt reproduziert.
    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!
    Code Form

    VB.NET-Quellcode

    1. Private Sub tmrUpdate_Tick(sender As Object, e As EventArgs) Handles tmrUpdate.Tick
    2. CheckUpdate(False, False)
    3. End Sub
    4. Private Sub CheckUpdate(ByVal waitForUser As Boolean, askUser As Boolean)
    5. Dim th As Threading.Thread
    6. Dim cUpdate As New clsUpdate(waitForUser, askUser)
    7. th = New Threading.Thread(AddressOf cUpdate.DownloadStart)
    8. th.TrySetApartmentState(Threading.ApartmentState.STA)
    9. th.IsBackground = True
    10. th.Priority = Threading.ThreadPriority.Normal
    11. th.Start()
    12. End Sub


    Code Klasse

    VB.NET-Quellcode

    1. Public Class clsUpdate
    2. Dim byUser, ask As Boolean
    3. Dim myVersion, newVersion As Integer
    4. Public Sub New(ByVal initByUser As Boolean, askUser As Boolean)
    5. byUser = initByUser
    6. ask = askUser
    7. mainform.tmrUpdate.Enabled = False 'Timer wird angehalten
    8. End Sub
    9. Public Sub DownloadStart()
    10. If Not cCls.IsInternetConnected(byUser) Then
    11. Exit Sub
    12. End If
    13. Dim client As New Net.WebClient()
    14. AddHandler client.DownloadStringCompleted, AddressOf ClientDownloadStringCompleted
    15. client.DownloadStringAsync(New Uri(MyNfo.UpdateURL))
    16. End Sub
    17. Private Sub ClientDownloadStringCompleted(ByVal sender As Object, ByVal e As Net.DownloadStringCompletedEventArgs)
    18. Try
    19. strNewVersion = e.Result
    20. newVersion = CInt(strNewVersion.Replace(",", ""))
    21. Catch ex As Exception
    22. newVersion = 0
    23. End Try
    24. myVersion = CInt(MyNfo.Version.Replace(".", ""))
    25. If newVersion > myVersion And
    26. newVersion > oldVersion Then
    27. oldVersion = newVersion
    28. isUpdate = True
    29. mainform.butUpdateStart.Text = "Update verfügbar"
    30. If Not byUser Then
    31. mainform.NotifyIcon.BalloonTipTitle = MyNfo.Name
    32. mainform.NotifyIcon.BalloonTipText = "Neue Version vefügbar v" & strNewVersion & vbCrLf &
    33. "Klicke hier um die neue Version zu installieren."
    34. mainform.NotifyIcon.ShowBalloonTip(1000 * 30)
    35. End If
    36. If ask Then
    37. askUser()
    38. End If
    39. End If
    40. mainform.tmrUpdate.Interval = 1000 * 10
    41. mainform.tmrUpdate.Enabled = True '<-- Timer wird nicht gestartet !!
    42. End Sub
    @woeh Wie kann der Code Deinen Effekt reproduzieren, wenn er nicht mal compiliert?
    Poste bitte getesteten Code, nicht nur compilierenden :!:
    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!