Sto costruendo un'app di Windows Store utilizzando C# e xaml. Ho bisogno di aggiornare i dati dopo un certo intervallo di tempo (portare i nuovi dati dal server). Ho usato ThreadPoolTimer di eseguire la mia funzione di aggiornamento periodicamente come segue:Eseguendo periodicamente una funzione dopo che la funzione ha completato il proprio compito
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);
Questo funziona correttamente. L'unico problema è che cosa succede se la funzione di aggiornamento non viene completata prima che la successiva istanza venga inoltrata al pool di thread. C'è un modo per specificare il divario tra la sua esecuzione.
Fase 1: Aggiornare esegue la funzione (prende qualsiasi quantità di tempo)
Fase 2: Aggiornare funzione completa la sua esecuzione
Fase 3: Gap per 15 minuti quindi andare al passo funzione 1
Refresh esegue. 15 minuti dopo la sua esecuzione, si esegue nuovamente.