よく使いそうな機能なので覚えておくと使えそう。
調べたら、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 件のコメント:
コメントを投稿