Buduję aplikację sklepu Windows przy użyciu C# i Xaml. Muszę odświeżyć dane po pewnym czasie (przynieść nowe dane z serwera). Kiedyś ThreadPoolTimer wykonywać moją funkcję odświeżania cyklicznie w następujący sposób:Wykonywanie funkcji okresowo po zakończeniu wykonywania funkcji
TimeSpan period = TimeSpan.FromMinutes(15);
ThreadPoolTimer PeriodicTimer = ThreadPoolTimer.CreatePeriodicTimer(async(source)=> {
n++;
Debug.WriteLine("hello" + n);
await dp.RefreshAsync(); //Function to refresh the data
await Dispatcher.RunAsync(CoreDispatcherPriority.High,
() =>
{
bv.Text = "timer thread" + n;
});
}, period);
To działa prawidłowo. Jedynym problemem jest to, co jeśli funkcja odświeżania nie zostanie ukończona, zanim jej kolejna instancja zostanie przekazana do puli wątków. Czy jest jakiś sposób na określenie luki między jego wykonaniem.
Etap 1: załaduj Skrypt wykonywany funkcyjne (przyjmować dowolną ilość czasu)
Etap 2: Odśwież funkcja kończy wykonanie
Etap 3: GAP 15 min, a następnie przejść do punktu funkcję 1
odświeżania wykonuje. 15 minut po zakończeniu jego realizacji, wykonuje ponownie.