这是我的问题。
Windows Phone 8.1 Visual Studio 2013 版本 4
我有一个主项目和一个每 30 分钟运行一次的后台项目。我想在两者之间传递数据。我想确保对 Windows.Storage.ApplicationData.Current.LocalSettings 中的存储的独占访问,因此我使用互斥体。
在我的主 XAML 项目中,我创建并使用名为“B+DBgMu”的互斥体(不要问)。
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.
Using true这是你的错误。这使您的主线程可以立即拥有互斥锁。互斥体是可重入的,接下来调用 WaitOne() 只是增加使用计数。调用 ReleaseMutex() 只是减少它。它永远不会归零。
所以你的主线程always拥有互斥体,并且您的后台工作人员永远无法获取它。简单修复,通过false反而。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)