gpt4 book ai didi

c# - C# 方法中的互斥体初始化总是返回正的 createdNew

转载 作者:太空宇宙 更新时间:2023-11-03 12:09:47 26 4
gpt4 key购买 nike

我创建了简单的 MutexManager:

public static class MutexManager
{
private static string mutexName
{
get
{
return "MyAppName" + System.Security.Principal.WindowsIdentity.GetCurrent().User.AccountDomainSid;
}
}

public static bool CreateApplicationMutex()
{

bool createdNew;
var mutex = new Mutex(false, mutexName, out createdNew);

return createdNew;
}
}

问题是 CreateApplicationMutex 总是在新的应用程序实例启动时返回 true。只要我在 app.cs 中有完全相同的代码,一切都是正确的,但在我将它移动到 MutexManager createdNew 之后,它总是正确的。我做错了什么?

最佳答案

以下对我来说按预期工作,并在第二个实例中返回 false

public static class MutexManager
{
private static string mutexName => "MyAppName" + System.Security.Principal.WindowsIdentity.GetCurrent()
.User?.AccountDomainSid;
public static bool CreateApplicationMutex()
{
new Mutex(false, mutexName, out var createdNew);

return createdNew;
}
}

private static void Main(string[] args)
{
Console.WriteLine(MutexManager.CreateApplicationMutex());
Console.ReadKey();
}

输出

true
false

确保调试您的应用程序,并检查互斥体名称

更新

Winforms

MessageBox.Show(
MutexManager.CreateApplicationMutex()
.ToString());
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());

WPF

public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
MessageBox.Show(
MutexManager.CreateApplicationMutex()
.ToString());
base.OnStartup(e);
}
}

再次按预期运行,无法重现

关于c# - C# 方法中的互斥体初始化总是返回正的 createdNew,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52925517/

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