WPF单例程序
单实例程序可以使用Mutex,但是不能激活已存在实例的主窗口,新实例也不能与已存在的实例进行通信,这里推荐使用WindowsFormsApplicationBase类。WindowsFormsApplicationBase这个类是要添加Microsoft.VisualBisic.dll引用的。
1、首先添加添加Microsoft.VisualBasic.dll的程序集引用
2、然后在App.xmal.cs中添加如下代码
namespace YCA9008
{
public class EntryPoint
{
[STAThread]
public static void Main(string[] args)
{
SingleInstanceManager manager = new SingleInstanceManager();
manager.Run(args);
}
}
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
public App()
{
InitializeComponent();
}
public void Activate()
{
this.MainWindow.Show();
this.MainWindow.Activate();
}
}
}
这里,SingleInstanceManager
public class SingleInstanceManager :
Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase
{
private App wpfapp; // 这才是真正的WPF Application
public SingleInstanceManager()
{
this.IsSingleInstance = true;
}
// 第一次打开调这个方法
protected override bool OnStartup(
Microsoft.VisualBasic.ApplicationServices.StartupEventArgs e)
{
wpfapp = new App();
wpfapp.Run();
return false;
}
/// <summary>
/// 当有其他应用程序实例化时,则触发此事件,弹出已存在的实例窗口
/// </summary>
/// <param name="eventArgs"></param>
protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs)
{
// Subsequent launches
base.OnStartupNextInstance(eventArgs);
wpfapp .Activate();
}
}
同时,还要设置程序入口点
具体请参考链接
https://www.cnblogs.com/dc10101/archive/2009/11/24/1609146.html