Mutex和Windows Phone 8.1
问题描述:
这是我的问题。 Windows Phone 8.1 Visual Studio 2013第4版Mutex和Windows Phone 8.1
我有一个主项目,每30分钟运行一个后台项目。我想在两者之间传递数据。我想确保在Windows.Storage.ApplicationData.Current.LocalSettings中独占访问存储,所以我使用互斥锁。
在我的主XAML项目中,我创建并使用名为“B + DBgMu”的Mutex(不问)。
public static Mutex Mu = null; // A Mutex
Mu = new Mutex (true, "B+DBgMu"); // Create a Mutex. This is done only once.
if (App.Mu.WaitOne (200)) // Wait for exclusive access. This is done often.
{
< PROTECTED CODE GOES HERE>
App.Mu.ReleaseMutex(); // Release our lock on application storage.
}
我确实得到了互斥和访问共享存储。
在我的背景的项目,我尝试(我认为)获得相同的互斥体,只有互斥从未获得过:
Mutex Mu = new Mutex (false, "B+DBgMu"); // Hook onto the Mutex.
if (Mu.WaitOne (1000)) // Wait (quite a while) for it.
{
< PROTECTED CODE GOES HERE
and it NEVER EXECUTES>
App.Mu.ReleaseMutex(); // Release our lock.
}
我搜遍网络,尤其是StackOverflow的,但我不知道有多少有什么适用于Windows Phone。 我在做什么错?
答
Mu = new Mutex (true, "B+DBgMu"); // Create a Mutex. This is done only once.
使用真正这里是你的错误。这使您的主线程立即拥有互斥锁的所有权。互斥量是可重入的,调用WaitOne()会简单地增加使用次数。并调用ReleaseMutex()简单地递减它。它永远不会归零。
所以你的主线程总是拥有互斥量,你的后台工作者永远无法获得它。简单修复,改为false。
今天学到了新东西,谢谢。 – Barnstokkr
谢谢。 '假'是付费的短语! – LionelGoulet