2015-11-04 251 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

相關問題