Ich habe eine Klasse mit RefreshAsync-Methode, die lange dauern kann, um auszuführen. Ich benutze Mvvm Lightrahmen. Ich brauche es zu nennen nach Objekt erstellt, aber nicht jedes Mal, wenn ich es bekommen Instanz von ServicelocatorWPF DispatcherTimer feuert nicht
var vm = ServiceLocator.Current.GetInstance<FileSystemViewModel>();
So DispatcherTimer
ich verwenden, um aufgeschobene Update-Logik zu erstellen. Aber es feuert nicht und ich weiß nicht warum. Hier
ist der Code
private DispatcherTimer _timer;
public FileSystemViewModel()
{
_timer = new DispatcherTimer(DispatcherPriority.Send) {Interval = TimeSpan.FromMilliseconds(20)};
_timer.Tick += DefferedUpdate;
_timer.Start();
}
private async void DefferedUpdate(object sender, EventArgs e)
{
(sender as DispatcherTimer)?.Stop();
await RefreshAsync().ConfigureAwait(false);
}
In welchem Thread läuft dieser Konstruktor? Das Erstellen eines 'DispatcherTimer' muss von einem Thread mit einem aktiven' Dispatcher' erfolgen (oder andernfalls einen gültigen aktiven 'Dispatcher' an den Konstruktor übergeben). –
Und was, wenn ich DispatcherTimer-Instanz in DispatcherHelper.CheckBeginInvokeOnUI (() => ...) erstellen? Wird es funktionieren? – Anton
Ich habe alles in der Antwort unten geschrieben. –