2015-11-04 119 views
3

这是我的问题。 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。 我在做什么错?

回答

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

使用真正这里是你的错误。这使您的主线程立即拥有互斥锁的所有权。互斥量是可重入的,调用WaitOne()会简单地增加使用次数。并调用ReleaseMutex()简单地递减它。它永远不会归零。

所以你的主线程总是拥有互斥量,你的后台工作者永远无法获得它。简单修复,改为false

+0

今天学到了新东西,谢谢。 – Barnstokkr

+0

谢谢。 '假'是付费的短语! – LionelGoulet