WPF 中,在Application.Run()运行后且Window.Show()运行前会激发Application.Startup事件,在Application类里有OnStartup()是Application.Startup事件的Handler,可以重载OnStartup(),在OnStartup()里面控制应用实例。
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
bool isCanCreateNew;
System.Threading.Mutex mutex = new System.Threading.Mutex(true, "OnlyRunOneInstance", out isCanCreateNew);
if (!isCanCreateNew)
{
MessageBox.Show("已经启动!");
this.Shutdown(1);
}
Console.WriteLine("OnStartup");
base.OnStartup(e);
}
}
或者订阅Application.Startup事件
<Application x:Class="WpfStudy.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Startup="Application_Startup"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
public partial class App : Application
{
private void Application_Startup(object sender, StartupEventArgs e)
{
bool isCanCreateNew;
System.Threading.Mutex mutex = new System.Threading.Mutex(true, "OnlyRunOneInstance", out isCanCreateNew);
if (!isCanCreateNew)
{
MessageBox.Show("已经启动!");
this.Shutdown(1);
}
Console.WriteLine("OnStartup");
}
}