よく使いそうな機能なので覚えておくと使えそう。
調べたら、Mutex クラスを使えばいいことがわかりました。
方法が簡単だったので、アプリケーション設定で二重起動を制御してみます。
まずは、App クラスの Startup イベントと Exit イベントを追加します。
Startup イベントで、MainWindow の表示を行うので、StartupUri プロパティは削除します。
<Application x:Class="WpfApplication.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Startup="OnStartup" Exit="OnExit"> <Application.Resources /> </Application>
次は追加したイベントです。
Startup イベントで、Mutex を作成して、すでに起動しているか判断します。
Exit イベントでは、Mutex を開放しています。
using System; using System.Threading; using System.Windows; public partial class App : Application { private static Mutex mutex = null; private bool isSingleInstance = false; private void OnStartup(object sender, StartupEventArgs e) { this.isSingleInstance = WpfApplication.Properties.Settings.Default.IsSingleInstance; if (this.isSingleInstance) { var name = this.GetType().Assembly.GetName().Name; mutex = new Mutex(false, name); if (!mutex.WaitOne(TimeSpan.Zero, false)) { mutex.Close(); this.Shutdown(); return; } } var mainWindow = new MainWindow(); mainWindow.Show(); } private void OnExit(object sender, ExitEventArgs e) { if (mutex != null) { mutex.ReleaseMutex(); mutex.Close(); } } }
実行ファイル名を変更しても二重起動できませんでした。
頑張りすぎず脱力系でいこうと思います。
以上。
0 件のコメント:
コメントを投稿