Hi an alle Leser,
ich habe arbeite an einem größerem Projekt, welches diverse Daten aus einer Datenbank lädt und diese lokal in MVVM-Klassen speichert. Bei Änderungen werden diese lokal und in der Datenbank eingepflegt, allerdings muss ich ja auch nach fremden Änderungen
in der Datenbank suchen. Aus diesem Grund hatte ich erst einen Thread und später einen Timer verwendet.
Ersteres brach direkt wieder ab, der Timer bekam eine Fehlermeldung, welche im Endeffekt darauf verwies, dass die UI nicht durch einen UI-Fremden Thread verändert werden dürfe.
Ich gehe davon aus, dass der Thread indem die Änderungen durchgeführt werden ach direkt die entsprechenden Controls mit den Daten aktualisieren will, was natürlich zu dem Problem mit einem UI-Fremden Thread führt.
public async Task Refresh()
{
try
{
this.IsLoading = true;
App.DatabaseData = Database.Open(App.DatabaseSqlConnectionString);
App.DatabaseSql = "SELECT * FROM TextCodes ORDER BY Code";
App.DatabaseResults = App.DatabaseData.Query(App.DatabaseSql);
App.DatabaseData.Close();
this.TextEntries.Clear();
foreach (var dataRow in App.DatabaseResults)
this.TextEntries.Add(new TextEntriesDataModel()
{
ID = Guid.Parse(Convert.ToString(dataRow.ID)),
Code = Convert.ToString(dataRow.Code),
Text = Convert.ToString(dataRow.Text)
});
this.PropertyChanged((object)this, new PropertyChangedEventArgs("TextEntries"));
this.IsLoading = false;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "TextEntriesDataViewModel.cs");
}
}
Das ist die Funktion, die einmal beim Start (in einem SplashScreen) und dann alle paar Minuten über einem Timer ausgeführt wird. So sehen auch die anderen Klassen aus, welche Daten laden.
Meine Frage lautet nun: Wie kann ich die Daten Zeitgesteuert aktualisieren, ohne dass die Anwendung abstürzt und die UI nicht einfriert?