如何创建单个实例WPF应用程序在尝试打开另一个实例时恢复打开的窗口?对不起,这个硬标题。我不知道怎么说。我有一个只允许每个用户会话运行一个实例的应用程序。如果用户再次单击以启动该应用程序,我希望该应用程序获得焦点。窗口可能已折叠可见性。如果它可见,我知道我可以使用if(IsIconic(hWnd)){ShowWindowAsync(hWnd,swRestore);}SetForegroundWindow(hWnd);但是如果窗户倒塌了,我有办法把它拉回来吗?您正在寻找互斥类。这很复杂,但幸运的是单例模式被广泛讨论。有几篇不错的文章,但您可以在SanityFreeCoding网站的C#.NET单实例应用程序页面中找到它的一个很好的实现。从链接页面:staticclassProgram{staticMutexmutex=newMutex(true,"{8F6F0AC4-B9A1-45fd-A8CF-72F04E6BDE8F}");[STAThread]staticvoidMain(){if(mutex.WaitOne(TimeSpan.Zero,true)){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);应用程序运行(新Form1());mutex.ReleaseMutex();}else{MessageBox.Show("一次只有一个实例");现在您可能想知道如何在WPF应用程序中使用Main方法,对吗?好吧,您需要做一些事情,但并不困难。请参阅为WPF应用程序编写自定义Main()方法一文,其中详细解释了这一点。摘自那篇文章:您基本上需要将应用程序的构建操作从“应用程序定义”更改为“页面”,创建一个调用“InitializeComponent”的构造函数,并通过最终调用应用程序的“运行”方法来覆盖它首先,编写Main()....也不要忘记从App.xaml中删除“StartupUri”,否则将显示窗口的另一个副本(除非因为URI指向不存在的XAML资源而出现错误)。因此,通过合并这两个资源,我们可以看到您的App.xaml.cs文件应如下所示:publicpartialclassApp:Application{privatestaticMutexmutex=newMutex(true,"{8F6F0AC4-B9A1-45fd-A8CF-72F04E6BDE8F}");私有静态主窗口mainWindow=null;App(){初始化组件();}[STAThread]staticvoidMain(){if(mutex.WaitOne(TimeSpan.Zero,true)){Appapp=newApp();mainWindow=newMainWindow();应用程序运行(主窗口);mutex.ReleaseMutex();}else{mainWindow.WindowState=WindowState.Normal;}}}我从App.xaml文件中删除了标记StartupUri。将App.xaml的BuildAction从ApplicationDefinition更改为Page(您可以在属性窗口中更改它)。添加对Microsoft.VisualBasic(WindowsFormsApplicationBase的命名空间)的引用。在App.xaml.cs类上,输入以下代码:publicpartialclassApp:Application{App(){InitializeComponent();}[STAThread]staticvoidMain(){SingleInstanceManagermanager=newSingleInstanceManager();manager.Run(new[]{"teste"});}}公共类SingleInstanceManager:WindowsFormsApplicationBase{SingleInstanceApplication应用程序;publicSingleInstanceManager(){this.IsSingleInstance=true;}protectedoverrideboolOnStartup(Microsoft.VisualBasic.ApplicationServices.StartupEventArgse){//第一次启动应用程序app=newSingleInstanceApplication();应用程序运行();返回假;}protectedoverridevoidOnStartupNextInstance(StartupNextInstanceEventArgseventArgs){//后续启动base.OnStartupNextInstance(eventArgs);应用程序激活();}}publicclassSingleInstanceApplication:Application{protectedoverridevoidOnStartup(System.Windows.StartupEventArgse){base.OnStartup(e);//创建并显示应用程序的主窗口MainWindow窗口=新主窗口();窗口.显示();}publicvoidActivate(){//重新激活应用程序的主窗口this.MainWindow.WindowState=WindowState.Normal;这个.MainWindow.Activate();有帮助:D以上是C#学习教程:HowtocreateasingleinstanceWPFapplicationtorestoreopenwindowwhentryingtoopenanotherinstance?分享的所有内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
