Как подать сигнал 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

Вы можете использовать межпроцессное взаимодействие через именованные события.

Вы можете подать сигнал фоновому агенту, как только откроете приложение переднего плана.

http://blogs.windows.com/buildingapps/2013/03/27/using-named-events-to-coordinate-foreground-apps-and-background-agents/

Другие вопросы по тегам