Инициализация мьютекса в методе C # всегда возвращает положительный созданный - PullRequest
0 голосов
/ 22 октября 2018

Я создал простой 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 создалNew, всегда будет верно.Что я делаю не так?

1 Ответ

0 голосов
/ 22 октября 2018

Следующее работает для меня, как ожидалось, и возвращает ложь во втором экземпляре

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);
   }
}

Еще раз все работает как положено и не может быть воспроизведено

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...