Я хочу, чтобы мой фоновый процесс не выполнял действие, если приложение открыто на переднем плане. Я нашел аналогичный вопрос, заданный here, но я не могу заставить его работать для меня. Когда мой фоновый процесс проверяет Mutex, он никогда не существует. Когда на переднем плане приложение начинает создать мьютекс так:Mutex и Windows Phone 8.1 Silverlight
public void Application_Launching(object sender, LaunchingEventArgs e)
{
var myMutex = new Mutex(false, "MUTEX_NAME");
}
Я отпускаю его, когда на переднем плане приложение закрывается:
private void Application_Closing(object sender, ClosingEventArgs e)
{
var myMutex = new Mutex(false, "MUTEX_NAME");
myMutex.ReleaseMutex();
}
в фоновом процессе У меня есть следующие проверки:
bool IsMutexLocked()
{
var myMutex = new Mutex(false, "MUTEX_NAME");
return myMutex.WaitOne(100);
}
Я предполагаю, что WaitOne
возвращает true, если "MUTEX_NAME"
не существует, или он существует, но освобождается после 100 мс. Я также пробовал использовать out createdNew
в конструкторе Mutex и статические методы OpenExisting
и TryOpenExisting
, но безрезультатно.
Спасибо, что сработал! Последующий вопрос, если при сбое приложения переднего плана выйдет мьютекс? – kernanb
@kernanb Нет, он не будет автоматически выпущен. Взгляните на шаблоны - повторное обращение в каждом случае происходит в * finally * блоке, в этом случае mutex выпущен независимо от того, было исключение или нет. – Romasz