Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Prozesse im Hintergrund weiterlaufen lassen
Chefspatz
myCSharp.de - Member



Dabei seit:
Beiträge: 8

Themenstarter:

Prozesse im Hintergrund weiterlaufen lassen

beantworten | zitieren | melden

Hallo, ich habe folgende Frage:

Ich habe ein WPF mit mehreren Pages erstellt. Wenn ich nun einen Timer auf Page1 starte (ich habe einfach einen Button drauf platziert, der einen DispatcherTimer startet) und zu Page2 wechsel, dann stoppt der Timer von Page1. Wie kann ich es erreichen, dass Prozesse einer Page weiterlaufen, auch wenn ich die aktuelle Page wechsel?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.928

beantworten | zitieren | melden

Erklär mal, was Du überhaupt tun willst - dann können wir Dir sagen, ob das mit dem Timer überhaupt sinnvoll ist, oder ob Du im Dunkeln tappst.
Timer in Pages sind sehr selten sinnvoll.
private Nachricht | Beiträge des Benutzers
Chefspatz
myCSharp.de - Member



Dabei seit:
Beiträge: 8

Themenstarter:

beantworten | zitieren | melden

Ich möchte ein kleines Spiel schreiben, wo man bestimmte Elemente anklicken und warten muss. Also der Spieler klickt einen Button an und muss 50 Sekunden warten, in der Zeit kann er dann auf eine andere Page gehen und da vielleicht auch einen Button drücken, der wieder X Sekunden braucht, ehe etwas passiert.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.928

beantworten | zitieren | melden

Dafür gibts sicher elegantere Lösungen, aber sofern Du einen DispatcherTimer sollte es das Pausieren hier nicht geben.
Du arbeitest sauber nach MVVM mit ViewModels und einem entsprechenden Binding?
[Artikel] MVVM und DataBinding

Mit Reactive Extensions in .NET könnte man das komfortabel über eine Timer Subscription lösen.


// ViewModel
IsEnabledSubmitButton = false;

_isEnabledSubmitButtonDelaySubscription =
    Observable.Timer(TimeSpan.FromSeconds(50))
    .Subscribe(
        x =>
        {
            IsEnabledSubmitButton = true;
                        
            if (_isEnabledSubmitButtonDelaySubscription is not null)
            {
                _isEnabledSubmitButtonDelaySubscription.Dispose();
                _isEnabledSubmitButtonDelaySubscription = null;
            }
        });
private Nachricht | Beiträge des Benutzers
Chefspatz
myCSharp.de - Member



Dabei seit:
Beiträge: 8

Themenstarter:

beantworten | zitieren | melden

Nein, ich glaube am Binding hapert es. Ich werde mir den Link mal anschauen und mich wieder melden.
private Nachricht | Beiträge des Benutzers
Chefspatz
myCSharp.de - Member



Dabei seit:
Beiträge: 8

Themenstarter:

beantworten | zitieren | melden

Ok, ich habe mir das durchgelesen und auch noch viel gegoogelt und einiges über MVVM erfahren. Das ist wohl eine Möglichkeit, den Code lesbarer und sauberer zu schreiben - ich würde das Prinzip auch einsetzen, wenn ich das Binding über Pages hinaus verstehen würde. Ich würde gerne zunächst einmal zwei Elemente, z.B. eine Textbox und einen Textblock auf zwei verschiedenen Seiten binden. Dass ich also auf einer Seite etwas am Textinhalt ändere und die andere Box sich auch ändert.

Wenn ich das aber so mache, funktioniert es nicht:

Page 1:

<TextBox Name="TextBox1" Text="?" Height="100" Width="600" BorderBrush="#FF0C0000" TextAlignment="Center" FontSize="20" TextWrapping="Wrap"  AcceptsReturn="True"  VerticalScrollBarVisibility="Visible" />

Page 2:


<TextBlock  Name="textblock1" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="50" Text="{Binding ElementName=QuestTextBox, Path=Text}"  />

Ich denke mal, dass das Programm auf Seite 2 nicht die Elemente von Seite 1 kennt. Daher dachte ich mir schon, dass man irgendwo angeben müsste. Aber ich finde nichts daz im Netz.

Sollte ich lieber die ganze Sache aufgeben, weil es zu schwer für mich und eher etwas für Fortgeschrittene Programmierer ist? Das Binding auf einer Seite ist so einfach zu verstehen, dass ich nicht dachte, dass das Binding zwischen Seiten so schwer sein könnte. Ich verstehe irgendwie die ganze Logik daginter nicht.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Chefspatz am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.928

beantworten | zitieren | melden

Aufgeben ist keine Option, das kann man alles lernen - jede:r hat es lernen müssen.
Aber es gibt dazu viele Tutorials, womit alle an ihr Ziel kommen können.

WPF ist so konzipiert, dass man MVVM verwendet. Verwendet man das nicht, wird man viele Probleme haben und Workarounds bauen müssen.
Das ist 10x schwerer und komplexer als MVVM zu lernen und anzuwenden - und am Ende besteht die Anwendung aus Kraut und Rüben.

Ja, das ist eine Einstiegshürde und ja, mit einem Try-And-Error-Vorgehen, das man zB. bei WinForms durchaus anwenden konnte, um schnell zu Ergebnissen zu kommen, klappt bei MVVM - egal ob nun bei WPF oder bei Angular, in der Regel nicht.
Da wird man kaum um echte Tutorials drum herum kommen, sonst kann man das Konzept eigentlich auch nicht verstehen.

Beim WPF "Nachfolger" MAUI kann man auch den MVU Pattern verwenden, das ein etwas leichtgewichtigeres Konzept verfolgt.
In WPF kann man MVU ohne entsprechende Bibliotheken (wie von Elmish) leider nicht anwenden.
private Nachricht | Beiträge des Benutzers