前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WPF应用单实例

WPF应用单实例

作者头像
码客说
发布2023-07-24 15:37:31
2330
发布2023-07-24 15:37:31
举报
文章被收录于专栏:码客

前言

默认情况下 WPF应用是能够多开的,但是大部分情况下我们只想打开一个实例,这就有两种情况

  • 保留之前的,关闭新打开的。
  • 关闭之前的。

保留之前的进程

代码语言:javascript
复制
protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);
    CheckProcess();
}

[DllImport("User32.dll")]
private static extern int FindWindow(string className, string windowName);

[DllImport("user32.dll")]
public static extern bool SetForegroundWindow(int hWnd);

private static void CheckProcess()
{
    Console.WriteLine(@"程序启动");
    Process current = Process.GetCurrentProcess();
    //获取欲启动进程名
    string strProcessName = Process.GetCurrentProcess().ProcessName;
    var processList = Process.GetProcessesByName(strProcessName);
    if (processList.Length > 1)
    {
        MessageWindow.Show("当前程序已在运行,请勿重复运行。");
        foreach (var process in processList)
        {
            if (process.Id == current.Id) continue;
            int hWnd = FindWindow(null, process.MainWindowTitle);
            SetForegroundWindow(hWnd);
        }
        Environment.Exit(1); //退出程序
    }
}

结束之前的进程

代码语言:javascript
复制
protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);
    CheckProcess();
}

/// <summary>
/// 结束已运行的程序
/// </summary>
private static void CheckProcess()
{
    Process current = Process.GetCurrentProcess();
    Process[] processList = Process.GetProcesses();
    foreach (Process process in processList)
    {
        if (process.ProcessName == Process.GetCurrentProcess().ProcessName)
        {
            if (process.Id != current.Id) //忽略当前进程
            {
                try
                {
                    process.Kill(); //结束进程
                }
                catch (Exception)
                {
                    // ignored
                }
            }
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 保留之前的进程
  • 结束之前的进程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档