В моем приложении у меня есть класс PrimaryViewModel (абстрактный) и каждый ViewModel наследовать от него.
Чтобы получать данные каждые X секунд, я написал следующий виртуальный метод
protected virtual async void RunSynchronizeTask()
{
await Task.Run(() =>
{
while (true)
{
Thread.Sleep(RefreshTime);
if (DateTime.Now.TimeOfDay - LastSyncrhonization.TimeOfDay > RefreshTime)
{
Application.Current.Dispatcher.Invoke(delegate
{
GetDataAndRefreshUI();
});
LastSyncrhonization = DateTime.Now;
}
}
});
}
Таким образом, у каждого viewModel есть свой метод и своя задача, которая будет получать данные из БД и обновлять привязанные элементы управления (например, messageViewModel обновляет список сообщений каждые 0,5 секунды)
но проблема в том, что когда я запускаю выпущенное приложение (без режима отладки, просто собираю как выпуск и открываю exe) и закрываю, приложение закрывается, но эта асинхронная задача все еще работает (я вижу это в диспетчере задач)
Что мне делать?
Как назначить эту задачу на что-то, я не могу сделать:
var task = await.Task.Run (...)
Если бы я мог, я бы создал какой-то статический список со ссылками на эти задачи, и при закрытии приложения я бы убил их или что-то ...