jedna instancja aplikacji

0

Program napisany jest z użyciem WindowsForms i ma się uruchamiać tylko raz.

 
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading;

namespace App
{
    static class Program
    {

        [STAThread]
        static void Main()
        {
            bool FirstRun;
            try
            {
                using (Mutex mutex = new Mutex(true, "Example", out FirstRun))
                {
                    if (FirstRun)
                    {

                        Application.EnableVisualStyles();
                        Application.SetCompatibleTextRenderingDefault(false);
                        Application.Run(new Form1());
                    }
                    else
                    {
                        mutex.ReleaseMutex();
                    }
                }
            }
            catch (ApplicationException ee)
            {
                MessageBox.Show("Program jest już uruchomiony");
            }
            finally
            {
                Application.Exit();
            }
        }
    }
}

A może jest lepsza metoda niż mutexy?
Czytałem coś o singletonach, jednak nie wiem czy pasują do tego przypadku...</quote>

0

Singleton to troche innego rodzaju pojecie. To co napisales jest swojego rodzaju singletonem, bo pozwala na jedna instancje programu. Klasyczny singleton pozwala na jedna instancje klasy, wiec w Twoim przypadku to co innego zupelnie. Co zlego w mutexach, ze chcesz zmieniac? Chyba, ze powyzszy przyklad nie dziala?

0

działa

0

Ja często używam takiego czegoś i działa bardzo dobrze.

if (Process.GetProcessesByName (Process.GetCurrentProcess ().ProcessName).Length > 1)
{
	return;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1