互斥锁与Windows Phone 8.1

3

这是我的问题。 Windows Phone 8.1 Visual Studio 2013 Release 4

我有一个主项目和一个每30分钟运行一次的后台项目。我想在两者之间传递数据。我希望确保对Windows.Storage.ApplicationData.Current.LocalSettings中存储的独占访问权,因此我使用Mutex。

在我的主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手机。 我做错了什么吗?

1个回答

4
   Mu = new Mutex (true, "B+DBgMu");   // Create a Mutex. This is done only once.

在这里使用true是错误的。这将使您的主线程立即拥有Mutex的所有权。Mutex是可重入的,接下来调用WaitOne()只会增加使用计数。而调用ReleaseMutex()只会递减它,它永远不会变为零。

因此,您的主线程总是拥有mutex,而后台工作线程永远无法获取它。简单的解决方法是传递false


谢谢。'false' 是付款的短语! - LionelGoulet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接