Как подать сигнал ScheduledTask из приложения переднего плана на Windows Phone?
Я создаю приложение, которое имеет приложение переднего плана (конечно), а также PeriodicTask и ResourceIntensiveTask.
Мне нужен способ закрыть запланированные задачи, если пользователь запускает само приложение во время их работы.
Я не вижу никакого способа сделать это с общесистемными мьютексами. В идеале, когда запускаются фоновые задачи, должен быть запущен поток, который прослушивает сигнал из приложения переднего плана, и если он получает этот сигнал, он может аккуратно завершить фоновую задачу.
Кроме опроса (скажем, папки для определенного файла), есть ли у кого-нибудь ясное предложение о том, как мое приложение переднего плана может сигнализировать моим фоновым агентам о закрытии, если приложение переднего плана запускается?
Я направляюсь к розеткам, но это кажется излишним.
Предыстория: в настоящее время я использую IsolatedStorage для хранения своих данных (не базы данных) - в конце концов я перейду к использованию базы данных.
Мое приложение переднего плана синхронизирует локальные данные с веб-службой и обновляет пользовательский интерфейс при добавлении новых элементов из веб-службы. Я использую файл, который ищу, чтобы найти элементы данных, и который я добавляю, когда новые элементы синхронизируются.
Я хочу, чтобы фоновые агенты запускались для выполнения этой синхронизации в фоновом режиме, обновления файлов в изолированном хранилище, включая индексы и т. Д. Но как только я запускаю приложение переднего плана, мне нужно остановить приложение фонового режима, чтобы передний план и фон не пытается одновременно обновить одни и те же файлы.
Мне нужно только один процесс для обновления локальных данных за раз, и мне нужен процесс переднего плана, чтобы выгрузить фоновый процесс.
2 ответа
Нет одновременного обновления решения:
Заявка ( App()
):
var m = new Mutex(false, "MyMutex");
m.WaitOne(); //When PeriodicTask runs wait
if(lastSynchronization > 1.Minutes)
{
//Update only when your PeriodicTask not runs before
}
//ApplicationExit
m.ReleaseMutex();
PeriodicTask (основной поток):
var m = new Mutex(false, "MyMutex");
if(m.WaitOne(0)) // Dont wait for the handle
{
// Synchronization
m.ReleaseMutex();
}
else
{
//Abort task (You dont want to wait for the main application)
}
Остановите PeriodicTask, когда приложение запускает решение:
Заявка ( App()
):
var m = new Mutex(false, "MyMutex");
m.WaitOne();
// Application
m.ReleaseMutex();
PeriodicTask (отдельная тема):
var m = new Mutex(false, "MyMutex");
while (m.WaitOne(0)) // Check for main application
{
m.ReleaseMutex();
}
// Abort task
Я думаю, что это лучшее решение с доступными членами в WP7:
http://msdn.microsoft.com/en-us/library/system.threading.mutex(v=VS.96).aspx
Вы можете использовать межпроцессное взаимодействие через именованные события.
Вы можете подать сигнал фоновому агенту, как только откроете приложение переднего плана.