互斥体和 Windows Phone 8.1

2024-04-01

这是我的问题。 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(使用前将#替换为@)

互斥体和 Windows Phone 8.1 的相关文章

随机推荐