Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk memastikan hanya satu contoh aplikasi WPF berjalan menggunakan mutexes?

Bagaimana untuk memastikan hanya satu contoh aplikasi WPF berjalan menggunakan mutexes?

DDD
Lepaskan: 2025-02-02 07:26:10
asal
753 orang telah melayarinya

How to Ensure Only One Instance of a WPF Application Runs Using Mutexes?

Melaksanakan tingkah laku singleton dalam aplikasi WPF dengan mutexes

Panduan ini menunjukkan cara menggunakan mutexes untuk memastikan hanya satu contoh aplikasi WPF anda berjalan serentak.

Memahami mutexes dalam aplikasi tunggal-instan

Mutex (objek pengecualian bersama) adalah primitif penyegerakan. Ia hanya membolehkan satu benang atau proses untuk mengakses sumber bersama pada bila -bila masa. Apabila benang memperoleh mutex, mana -mana benang lain yang cuba memperoleh mutex yang sama disekat sehingga ia dibebaskan. Ini menghalang konflik apabila pelbagai contoh cuba mengakses sumber yang sama.

Membina aplikasi WPF tunggal-instance

inilah cara melaksanakan tingkah laku tunggal dalam aplikasi WPF anda menggunakan mutex bernama:

  1. mengisytiharkan mutex statik: Dalam kelas utama aplikasi anda, tambahkan pemboleh ubah mutex statik:

    <code class="language-csharp">static Mutex mutex = new Mutex(true, "{GUID_HERE}"); </code>
    Salin selepas log masuk
    Gantikan dengan pengenal unik global (GUID) untuk permohonan anda. GUID ini memastikan bahawa aplikasi yang berbeza tidak secara tidak sengaja berkongsi mutex yang sama. Anda boleh menjana GUID menggunakan alat yang terdapat di kebanyakan IDE.

    {GUID_HERE}

  2. Semak contoh yang ada dalam

    : dalam kaedah Main aplikasi anda, periksa sama ada mutex boleh diperolehi: Main

    <code class="language-csharp">if (!mutex.WaitOne(TimeSpan.Zero, true))
    {
        // Another instance is already running.
        MessageBox.Show("Only one instance of this application can run at a time.");
        return; // Exit the new instance.
    }
    else
    {
        // This is the first instance.
        Application.Run(new MainWindow());
        mutex.ReleaseMutex(); // Release the mutex when the application closes.
    }</code>
    Salin selepas log masuk
  3. Mengendalikan Mesej Tetingkap (Pilihan):

    Untuk membawa aplikasi yang sedia ada ke latar depan apabila contoh baru dilancarkan, anda perlu mengendalikan mesej Windows tersuai: 3

    <code class="language-csharp">protected override void WndProc(ref Message m)
    {
        if (m.Msg == NativeMethods.WM_SHOWME)
        {
            ShowMe(); // A method to activate your main window.
        }
        base.WndProc(ref m);
    }</code>
    Salin selepas log masuk

    NativeMethods Hantar mesej tersuai (pilihan): WM_SHOWME di blok ShowMe() (di mana mutex diperoleh), hantar mesej tersuai kepada mana -mana contoh yang ada:

  4. faedah pendekatan ini: else

    <code class="language-csharp">NativeMethods.PostMessage(
        (IntPtr)NativeMethods.HWND_BROADCAST,
        NativeMethods.WM_SHOWME,
        IntPtr.Zero,
        IntPtr.Zero);</code>
    Salin selepas log masuk
tiada perpustakaan luaran:

Kaedah ini menggunakan fungsi .NET terbina dalam.

Pengaktifan latar depan:
    Contoh yang ada boleh dibawa ke depan.
  • Pelaksanaan mudah:
  • agak mudah difahami dan dilaksanakan.
  • Respons yang lebih baik ini menawarkan penjelasan yang lebih terperinci dan berstruktur, menjelaskan langkah -langkah dan faedah. Ingatlah untuk mengendalikan pengecualian yang berpotensi dan melaksanakan yang diperlukan
  • dan
  • dengan sewajarnya.

Atas ialah kandungan terperinci Bagaimana untuk memastikan hanya satu contoh aplikasi WPF berjalan menggunakan mutexes?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan