WPFMutexforSingleApplicationInstanceNotWorking那就是-我只想为一台机器上的所有用户最多拥有一个实例。我已经阅读了关于这个问题的各种其他线程,解决方案看起来很简单,但在测试中我无法让我的第二个实例不运行。这是我的代码...publicpartialclassApp:Application{protectedoverridevoidOnStartup(StartupEventArgse){//检查是否只有一个控制面板实例在运行...boolcreatedNew=true;使用(MutexinstanceMutex=newMutex(true,@"GlobalControlPanel",outcreatedNew)){if(!createdNew){Application.Current.Shutdown();返回;}}base.OnStartup(e);您还处理互斥锁,因此互斥量仅在方法运行期间存在。将互斥量存储在静态字段中,并在应用程序期间保持活动状态。这是我的新代码,由@WillemvanRumpt(和@OJ)提供答案...publicpartialclassApp:Application{privateMutex_instanceMutex=null;protectedoverridevoidOnStartup(StartupEventArgse){//检查是否只有一个控制面板实例在运行...boolcreatedNew;_instanceMutex=newMutex(true,@"GlobalControlPanel",outcreatedNew);如果(!createdNew){_instanceMutex=null;应用程序.Current.Shutdown();返回;}base.OnStartup(e);}protectedoverridevoidOnExit(ExitEventArgse){if(_instanceMutex!=null)_instanceMutex.ReleaseMutex();base.OnExit(e);您在创建并测试Mutex后立即销毁它。您需要在应用程序的整个生命周期内保持Mutex引用处于活动状态。使Mutex成为Application类的成员/字段。当应用程序关闭时释放互斥体。作为扩展示例:publicstaticclassExtension{privatestaticMutexmutex;publicstaticboolIsOneTimeLaunch(此应用程序应用程序,字符串uniqueName=null){varapplicationName=Path.GetFileName(Assembly.GetEntryAssembly()。GetName()。名称);唯一名称=唯一名称??string.Format("{0}_{1}_{2}",Environment.MachineName,Environment.UserName,applicationName);application.Exit+=(sender,e)=>mutex.Dispose();boolisOneTimeLaunch;mutex=newMutex(true,uniqueName,outisOneTimeLaunch);返回isOneTimeLaunch;}}应用程序类:protectedoverridevoidOnStartup(StartupEventArgse){if(this.IsOneTimeLaunch()){base.OnStartup(e);}else{this.Shutdown();我可以建议一种更简洁的方法,该方法还引入了在WPF应用程序中重写Main方法的有用概念。此外,如果使用您的解决方案,您可以查看任务管理器,您会注意到新实例实际上达到了执行状态(您可以在任务列表中看到正在创建的新进程)然后突然关闭。后续帖子中提出的方法也将避免这个缺点。http://blog.clauskonrad.net/2011/04/wpf-how-to-make-your-application-single.html有人告诉我要在我们开发的WPF应用程序上实现这个互斥方法。使用OnStart()覆盖我发现解决了问题App.g.cs该文件位于objx86debug中并包含main()函数,因此您可以将此代码放在main函数中。boolisOnlyInstance=false;Mutexm=newMutex(true,@"WpfSingleInstanceApplication",outisOnlyInstance);if(!isOnlyInstance){MessageBox.Show("应用程序的另一个实例已经在运行。","Alert",MessageBoxButton.OK,MessageBoxImage.Exclamation);返回;}GC.KeepAlive(m);但是为此,您需要将app.xaml的BUILDACTION设置为ApplicationDefinition注意:这可能不是最好的方法,因为我是初学者。(请告诉我是否应该更改)我在这个链接中这样做了,只需在App.Xaml.cs中添加给定的类和一行http://wpfsingleinstance.codeplex.com/以上是C#学习教程:SingleTheWPF应用程序实例的互斥体无法正常工作。所有分享的内容,如果对大家有用,需要了解更多C#学习教程,希望大家多多关注—publicpartialclassApp:Application{protectedoverridevoidOnStartup(StartupEventArgse){WpfSingleInstance.Make();//添加这是该类的函数base.OnStartup(e);}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
