wpf 程序 启动唯一一个进程,避免多次打开
使用WindowsFormsApplicationBase
首先在项目中创建一个启动类
class Program { [STAThread] public static void Main(string[] args) { SingleInstanceManager manager = new SingleInstanceManager(); manager.Run(args); } } /// <summary> /// 单例进程 /// </summary> public class SingleInstanceManager : WindowsFormsApplicationBase { App app; public SingleInstanceManager() { this.IsSingleInstance = true; } protected override bool OnStartup(Microsoft.VisualBasic.ApplicationServices.StartupEventArgs e) { // First time app is launched app = new App(); app.Run(); return false; } protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs) { // Subsequent launches base.OnStartupNextInstance(eventArgs); app.Activate(); } }
然后再我们原先的app中,去掉Application_Startup事件的引用,使用重写的 protected override void OnStartup(StartupEventArgs e)
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); LoadComponent(this, new Uri("App.xaml", System.UriKind.Relative)); MainWindow window = new MainWindow(); window.Show(); }
app中添加激活方法
public void Activate() { if (this.MainWindow != null) { this.MainWindow.Show(); this.MainWindow.Activate(); } }
这个时候运行报错会提示重复的main入口
右键项目属性 应用程序 启动对象更改你添加的入口类
至此,应用程序就会始终以单例的形式打开了!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端