Я работаю над приложением Windows Phone 8.1 для покупок. У меня есть непрерывный поток в приложении, который загружает корзину пользователей и сохраняет его в локальном кеше, чтобы повысить производительность. Пока что у меня есть что-то вроде этого:Справочная информация в Windows Phone 8.1 приложение
while(UserLoggedIn)
{
await Networking.getBasket();
await Task.Delay(5000);
}
Этот поток запускается, когда приложение возобновляется. Мой вопрос: какой лучший подход для контроля такой темы? При возобновлении приложения это кажется очень медленным, и иногда он блокирует поток пользовательского интерфейса, хотя он полностью асинхронный. Как повысить производительность?
EDIT
Согласно предложению Romasz, я использовал таймер, как это:
объявляя его:
Timer _getBasketTimer;
его инициализации в конструкторе приложения:
_getBasketTimer = new Timer(getBasketCallback, null, 5000, Timeout.Infinite);
Определение обратного вызова :
private async void getBasketCallback(Object state)
{
if (JSONCache.getSessionID() != "" && Networking.LoginInProgress == false)
await Networking.getBasket();
//The Change method may be called when the Timer object is already Disposed (I debugged it, and the exception did occur sometimes)
try
{
_getBasketTimer.Change(5000, Timeout.Infinite);
}
catch(ObjectDisposedException)
{
}
}
Располагая его Приостанавливая событии приложения, так что тема не будет работать, когда приложение приостановлено:
_getBasketTimer.Dispose();
и запустить его, когда приложение возобновляет:
_getBasketTimer = new Timer(getBasketCallback, null, 5000, Timeout.Infinite);
Почему бы не использовать таймер с интервалом в 5 секунд и проверить его в корзине? – Romasz
Я не знал, что могу сделать что-то вроде этого :) Но это звучит круто! – WPMed
@Romasz 'Task.Delay' внутренне использует таймер. –