gpt4 book ai didi

c# - 互斥锁和 Windows Phone 8.1

转载 作者:行者123 更新时间:2023-11-30 15:24:02 25 4
gpt4 key购买 nike

这是我的问题。Windows Phone 8.1 Visual Studio 2013 第 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 并访问了共享存储。

在我的后台项目中,我尝试(我认为)获取相同的 Mutex,只是永远不会获取 Mutex:

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.
}

我已经搜索过 Web,尤其是 StackOverflow,但我想知道有多少内容适用于 Windows Phone。我做错了什么?

最佳答案

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

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

因此您的主线程始终拥有互斥锁,而您的后台工作程序永远无法获取它。简单修复,改为传递 false

关于c# - 互斥锁和 Windows Phone 8.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33534243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com