У меня есть бизнес-приложение (LoB) Windows 8.1 Хранилище, которое я разработал для клиента. Клиентская сторона загружает его на несколько таблиц Windows 10. Они используют его в среде, где WiFi в лучшем случае пятнистый, и они хотели бы получить какое-то уведомление внутри приложения, независимо от того, на какой странице они находятся, уведомление, которое сообщит им, что они потеряли связь с сетью. Я создал метод в моем веб-API, который не попадает в репозиторий (базу данных). Вместо этого он быстро возвращает некоторую статическую информацию о моем веб-интерфейсе, таком как версия, дата и время вызова и некоторые товарные знаки, которые я должен вернуть. Я думал о том, чтобы называть этот метод точными интервалами времени, и когда ответа нет, предположим, что соединение веб-API потеряно. В моей главной странице, первый отображаются при запуске приложения, у меня есть следующие вещи в конструкторе моей точки зрения модели:Как узнать статус доступности веб-API из приложения Windows Store
_webApiStatusTimer = new DispatcherTimer();
_webApiStatusTimer.Tick += OnCheckWebApiStatusEvent;
_webApiStatusTimer.Interval = new TimeSpan(0, 0, 30);
_webApiStatusTimer.Start();
Затем обработчик событий реализована так:
private async void OnCheckWebApiStatusEvent(object sender, object e)
{
// stop the timer
_webApiStatusTimer.Stop();
// refresh the search
var webApiInfo = await _webApiClient.GetWebApiInfo();
// add all returned records in the list
if (webApiInfo == null)
{
var messageDialog = new MessageDialog(@"The application has lost connection with the back-end Web API!");
await messageDialog.ShowAsync();
// restart the timer
_webApiStatusTimer.Start();
}
}
Когда соединение веб-API теряется, я получаю приятное всплывающее сообщение, информирующее меня о том, что веб-интерфейс больше недоступен. Проблема в том, что через некоторое время, особенно если я перемещаюсь от первой страницы, но не обязательно, я получаю UnauthorizedAccessException в моем приложении.
Я использую DispatcherTimer, поскольку я понимаю, что он совместим с потоками UI , но, очевидно, я все еще что-то не так. Кто-нибудь заботится, чтобы поставить меня на правильный путь?
Кроме того, если вы сделали что-то подобное и нашли гораздо лучший подход, я бы хотел услышать о вашем решении.
Спасибо заранее, Эдди