jedna instancja aplikacji

Odpowiedz Nowy wątek
2008-02-24 03:10

Rejestracja: 12 lat temu

Ostatnio: 7 lat temu

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>


"Wszystko co może być wynalezione, zostało wynalezione"
Charless H. Duell - komisarz urzędu patentowego U.S., 1899

Pozostało 580 znaków

2008-02-24 10:24

Rejestracja: 14 lat temu

Ostatnio: 8 lat temu

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?


You need to learn how to walk
before you can run

Pozostało 580 znaków

2008-02-24 14:59

Rejestracja: 12 lat temu

Ostatnio: 7 lat temu

0

działa


"Wszystko co może być wynalezione, zostało wynalezione"
Charless H. Duell - komisarz urzędu patentowego U.S., 1899

Pozostało 580 znaków

2008-03-04 00:38

Rejestracja: 11 lat temu

Ostatnio: 7 lat temu

0

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

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

Pozostało 580 znaków

Odpowiedz

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