Мои требования: нужен таймер сеанса для каждой страницы (кроме страницы входа). Если таймер превысил 60 секунд без каких-либо действий пользователя, он должен перенаправить на страницу входа.Windows Phone - Application Level DispatcherTimer
Я успешно выполнил вышеуказанное требование для одной страницы с нижеприведенными фрагментами кода.
DispatcherTimer dispatcherTimer;
DateTimeOffset startTime;
DateTimeOffset lastTime;
DateTimeOffset stopTime;
int timesTicked = 1;
int timesToTick = 60;
page_load()
{
dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Tick += dispatcherTimer_Tick;
dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
startTime = DateTimeOffset.Now;
lastTime = startTime;
dispatcherTimer.Start();
}
private void PhoneApplicationPage_ManipulationCompleted(object sender, System.Windows.Input.ManipulationCompletedEventArgs e)
{
startTime = DateTimeOffset.Now;
lastTime = startTime;
dispatcherTimer.Start();
}
void dispatcherTimer_Tick(object sender, object e)
{
DateTimeOffset time = DateTimeOffset.Now;
TimeSpan span = time - lastTime;
lastTime = time;
timesTicked++;
if (timesTicked > timesToTick)
{
isTimeOver = true;
stopTime = time;
dispatcherTimer.Stop();
span = stopTime - startTime;
MessageBox.Show("Login again", "Session Expired", MessageBoxButton.OK);
NavigationService.Navigate(new Uri("/Login_3.xaml", UriKind.Relative));
}
}
Мне нужна эта логика для каждой страницы. Поскольку страницы недоступны в пользовательских классах для навигации, я смущен. Я не думаю, что писать dispatcherTimer_Tick
событие на каждой странице - хороший подход. Не могли бы вы кому-нибудь посоветовать, как мы можем это сделать в одном коде, который можно использовать для каждой страницы? Заранее спасибо :)
Спасибо за ваш ответ. Я пробовал вот так, Но у меня есть ошибка, например, имя «PageBaseWithTimer» не существует в пространстве имен «clr-namespace: TEST» Не могли бы вы рассказать о втором фрагменте кода? – Ramin