DispatcherTimer GUI Freeze

  • WPF

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von thefiloe.

    DispatcherTimer GUI Freeze

    Hallo Community
    Endlich bin ich in WPF angekommen.
    Ich lerne auch neue Dinge dazu.
    Heute möchte ich euch fragen wie man den DispatcherTimer richtig verwendet damit der GUI nicht hängen bleibt.
    Mein Ziel ist das Multithreading natürlich
    So sieht der bisherige Code aus:

    VB.NET-Quellcode

    1. Dim Text1 as New TextBlock
    2. Dim DPT As DispatcherTimer
    3. DPT = New DispatcherTimer(DispatcherPriority.Normal)
    4. DPT.Dispatcher.Thread.SetApartmentState(ApartmentState.STA)
    5. DPT.Dispatcher.Thread.IsBackground = True
    6. DPT.Interval = New TimeSpan(0, 0, 0, 0, 0)
    7. AddHandler DPT.Tick, AddressOf DPT_Tick
    8. Private Sub DPT_Tick(ByVal sender As Object, ByVal e As EventArgs)
    9. Dispatcher.Invoke((DispatcherPriority.Normal), New Action(Of Window1)(AddressOf SetWindow), Fenster1)
    10. DPT.Stop()
    11. End Sub
    12. Private Sub SetWindow(value As Window1)
    13. Text1.FontSize = 20
    14. Text1.Text = "Text"
    15. value.StackPanel.Children.Add(Text1)
    16. 'Hier wird ein UserControl welches Text zum "value" hinzugefügt, welches man beliebig ändern kann (Text, Schriftgröße)
    17. End Sub


    Danke im Voraus ^^

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

    welcher code?

    ich sehe 2 Methoden und 7 Zeilen, die scheinbar nirgends hingehören.

    Was welcher Code macht, kannich ühaupt nicht erkennen, ausser dass in SetValueTeamWin() ein Textblock betextet wird.
    Solch blockiert ein Gui aber üblicherweise nicht.

    Ich sehe nichtmal, dass SetValueTeamWin() iwo aufgerufen würde - ist das fürs Problem ühaupt relevant?
    gut das du es erwähnst ich ändere es schnell


    Edit:
    sogesagt das baut sich alles in einen anderen fenster zusammen auf
    aber das wäre schon eine idee :thumbsup:

    Edit2:
    aber was wäre wenn ich es unbedingt so machen müsste

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

    Nen Timer ist nicht gleich Threading. Der DispatcherTimer läuft auch im Hauptdispatcher und wenn der Timer hängt hängt somit auch die GUI. Und sobald du irgendwo Dinge wie Dispatcher.Invoke siehst, musst du wissen, dass der Code welcher dadurch ausgeführt wird ebenfalls im Hauptthread läuft.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.