Как обеспечить единый экземпляр приложения (на нескольких виртуальных рабочих столах)? - PullRequest
2 голосов
/ 12 апреля 2019

Я пишу приложение C # WinForms, которое мне нужно, чтобы в любой момент времени работал один экземпляр. Я думал, что у меня это работает с помощью Mutex (https://www.c -sharpcorner.com / UploadFile / f9f215 / как ограничить приложение одним экземпляром / ).

Это работало нормально, когда я использую один рабочий стол. Однако, когда в Windows 10 открыто несколько виртуальных рабочих столов, на каждом из этих рабочих столов может размещаться другой экземпляр приложения.

Есть ли способ ограничения одного экземпляра на ВСЕХ рабочих столах?

1 Ответ

4 голосов
/ 12 апреля 2019

Если вы посмотрите на раздел Замечания в документации (см. Блок Note) - вы можете видеть, что все, что вам нужно сделать, это поставить префикс мьютекса на "Global\".Вот пример для WinForms:

// file: Program.cs
[STAThread]
private static void Main()
{
    using (var applicationMutex = new Mutex(initiallyOwned: false, name: @"Global\MyGlobalMutex"))
    {
        try
        {
            // check for existing mutex
            if (!applicationMutex.WaitOne(0, exitContext: false))
            {
                MessageBox.Show("This application is already running!", "Already running",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
        }
        // catch abandoned mutex (previos process exit unexpectedly / crashed)
        catch (AbandonedMutexException exception) { /* TODO: Handle it! There was a disaster */ }

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MainForm());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...