首页 > 其他分享 >WPF之单例模式

WPF之单例模式

时间:2024-05-27 22:13:48浏览次数:26  
标签:isNew hwnd 模式 other mutex 单例 2019 WPF Win32Api

 

问题

2019年10月9日星期三 上午2:46

1、为了实现单例模式,在App类中添加了如下代码,使用了信号量,但是为什么返回;isNew一直为true

public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            bool isNew=false;
            Mutex mutex = new Mutex(true, "MySingleInstance", out isNew);
            if(!isNew)
            {
                ActivateOtherWindow();
                Shutdown();
            }
            GC.KeepAlive(isNew);
        }

        private static void ActivateOtherWindow()
        {
            var other = Win32Api.FindWindow(null, "MainWindow");
            if (other != IntPtr.Zero)
            {
                Win32Api.SetForegroundWindow(other);
                if (Win32Api.IsIconic(other))
                    Win32Api.OpenIcon(other);
            }
        }
    }

全部回复 (2)

2019年10月9日星期三 上午6:35 ✅已答复 | 1 票

private Mutex mutex = null;

private void CheckSingleInstanceAndStartMainApp(string title)
        {
            bool isNew = false;
            if (null == mutex)
                mutex = new Mutex(true, "PowerPixel", out isNew);
            if (!isNew)
            {
                ActiveAndShowToFront(title);
                Environment.Exit(0);//强制退出,不会有弹框提示
            }
        }

        private void ActiveAndShowToFront(string titleName)
        {
            //s1:通过WAPi:FindWindow获取运行实例的句柄
            //或者事先保存实例,传递过来           
            IntPtr hwnd = Win32Api.FindWindow(null, titleName);

            if (hwnd != IntPtr.Zero)
            {
                Win32Api.SetForegroundWindow(hwnd);
                if (Win32Api.IsIconic(hwnd))
                    Win32Api.OpenIcon(hwnd);
            }
        }


2019年10月9日星期三 上午3:32

mutex不能被回收

 https://learn.microsoft.com/zh-cn/archive/msdn-technet-forums/bd78928c-890e-435d-acd6-6efc83590975  

 

标签:isNew,hwnd,模式,other,mutex,单例,2019,WPF,Win32Api
From: https://www.cnblogs.com/webenh/p/18216658

相关文章

  • WPF DataGrid使用 自动显示行号、全选、三级联动、拖拽
    1.DataGrid的使用自动显示行号(修复删除行时行号显示不正确)  ViewCodedgTool.LoadingRow+=newEventHandler<DataGridRowEventArgs>(dgTool_LoadingRow);dgTool.UnloadingRow+=newEventHandler<DataGridRowEventArgs>(dgTool_UnloadingRow);voi......
  • WebView2在WPF中的应用
    开发环境运行环境:.Net6开发环境:VisualStudio202217.1.3框架语言:WPF安装WebView2通过PackageManager控制台安装Install-PackageMicrosoft.Web.WebView2通过Nuget包管理器安装在窗体中添加名字空间:xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;asse......
  • “胖东来”超市商业模式,为何被誉为中国零售业是神一般的存在?
    “胖东来”超市商业模式,为何被誉为中国零售业是神一般的存在?文丨微三云营销总监胡佳东,点击上方“关注”,为你分享市场商业模式电商干货。-胖东来是中国商超界的天花板,被小米老板雷军:誉为“中国零售业是神一般的存在”,2023年的销售收入甚至超100亿元,引无数商超企业、超市老板......
  • 第七十五节 Java设计模式 - 模板方法模式
    Java设计模式-模板方法模式在模板模式中,父抽象类公开几个抽象方法供子类实现。在父抽象类中有另一个方法或几个方法使用抽象方法来实现业务逻辑。抽象方法通常用于父类所需的每个步骤。例如,为了使用新的软件,我们需要下载,安装,配置和运行。如果我们要使用模板模式来编码逻......
  • c++设计模式-装饰器模式和代理模式
    namespace_nmsp1{//抽象的控件类classControl{public:virtualvoiddraw()=0;//draw方法,用于将自身绘制到屏幕上。public:virtual~Control(){}//做父类时析构函数应该为虚函数};//列表控件类classListCtrl......
  • Kubernetes(k8s) v1.30.1 本地集群部署 安装metallb 支持LoadBalancer 生产环境 推荐
    1 metallb安装参考:Kubernetes(k8s)v1.30.1本地集群部署默认不支持LoadBalancermetallb来解决-CSDN博客2 删除Layer2模式配置kubectldelete-fIPAddressPool.yamlkubectldelete-fL2Advertisement.yamlkubectldelete-fdiscuz-srv.yaml3配置k8sMeta......
  • 如何在中文输入法模式下,使用英文符号?
    1、为什么有这种需求?当你使用Notion等笔记服务时,它的输入语法命令是斜杠(/),而在中文输入法场景下按健输入的是顿号(、),需要切换输入法才可以输入英文符号。因此,期待可以在中文输入法场景下,输入英文符号。减少切换的烦恼。2、如何解决?Windows自带的微软输入法支持......
  • C# wpf之控制屏幕显示方向旋转
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Runtime.InteropServices;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Documents......
  • CAN 回环模式正常,异常模式失败。
    osStatus_tosStatus=osMessageQueuePut(osMessageQueueId_RACKRX_TxMsg,&CanTxMsgPtr,0,0);把数据放到队列中if(osOK==osMessageQueueGet(osMessageQueueId_RACKRX_TxMsg,(void**)&CanTxMsgPtr,NULL,osWaitForever))从队列中取出数据HAL_CAN_AddTxMessage(&RAC......
  • 一文详解SaaS增长模式:PLG、MLG、SLG哪种更适合你?
    在SaaS(软件即服务)的领域中,增长策略的选择对于企业的成功至关重要。其中,PLG(产品驱动增长)、MLG(市场驱动增长)和SLG(销售驱动增长)是三种常见的策略,三者被称为驱动saas用户增长的三因子,那么,究竟哪种策略更适合你的企业呢?一、PLG(产品驱动增长)这种策略的核心在于通过产品自身的优秀......