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:
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>
{GUID_HERE}
: 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>
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>
NativeMethods
Hantar mesej tersuai (pilihan): WM_SHOWME
di blok ShowMe()
(di mana mutex diperoleh), hantar mesej tersuai kepada mana -mana contoh yang ada:
faedah pendekatan ini: else
<code class="language-csharp">NativeMethods.PostMessage( (IntPtr)NativeMethods.HWND_BROADCAST, NativeMethods.WM_SHOWME, IntPtr.Zero, IntPtr.Zero);</code>
Kaedah ini menggunakan fungsi .NET terbina dalam.
Pengaktifan latar depan: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!