【WPF】单例软件实现自重启

wpf,软件,实现,自重 · 浏览次数 : 48

小编点评

**代码示例:** ```csharp public partial class App : Application { private static Mutex _mutex = null; const string appName = "MyAppName"; bool createdNew; protected override void OnStartup(StartupEventArgs e) { _mutex = new Mutex(true, appName, out createdNew); if (!createdNew) { // 应用程序已经在运行!当前的执行退出。 Application.Current.Shutdown(); } base.OnStartup(e); } public void Restart() { // 释放互斥锁 _mutex.ReleaseMutex(); // 重启应用程序 System.Diagnostics.Process.Start(Application.ResourceAssembly.Location); // 关闭当前应用程序 Application.Current.Shutdown(); } } ``` **说明:** * `_mutex` 是一个互斥锁,用于确保应用程序只有一个实例运行。 * `createdNew` 是一个布尔变量,用于指示应用程序是否在启动时被创建了。 * `OnStartup()` 方法首先创建了一个互斥锁,如果锁已存在,应用程序就退出。 * `Restart()` 方法首先释放互斥锁,然后启动新的应用程序实例,最后关闭当前应用程序。 * `System.Diagnostics.Process.Start()` 方法用于启动应用程序实例。

正文

原文地址 https://www.cnblogs.com/younShieh/p/17749694.html

❤如果本文对你有所帮助,不妨点个关注和推荐呀,这是对笔者最大的支持~❤

在WPF应用程序中,想要实现软件重启,可以再Start一次该软件的exe程序。
但是有些时候我们想要这个程序是唯一运行的单例,而不是可以多开的程序。
我们可以先在程序启动时给程序加一个互斥锁,保证该应用程序运行进程的唯一性。在想要实现程序的自重启时,释放当前的互斥锁,然后再启动新的实例。
以下是一个示例:

public partial class App : Application
{
    private static Mutex _mutex = null;
    const string appName = "MyAppName";
    bool createdNew;

    protected override void OnStartup(StartupEventArgs e)
    {
        _mutex = new Mutex(true, appName, out createdNew);

        if (!createdNew)
        {
            //应用程序已经在运行!当前的执行退出。
            Application.Current.Shutdown();
        }

        base.OnStartup(e);
    }

    public void Restart()
    {
        // 释放互斥锁
        _mutex.ReleaseMutex();

        // 重启应用程序
        System.Diagnostics.Process.Start(Application.ResourceAssembly.Location);
        Application.Current.Shutdown();
    }
}

我们添加了一个Restart方法,该方法首先释放互斥锁,然后启动新的应用程序实例,最后关闭当前的应用程序。这样,新的应用程序实例就可以获取互斥锁,而不会因为互斥锁已经被占用而无法启动。

与【WPF】单例软件实现自重启相似的内容:

【WPF】单例软件实现自重启

原文地址 https://www.cnblogs.com/younShieh/p/17749694.html ❤如果本文对你有所帮助,不妨点个关注和推荐呀,这是对笔者最大的支持~❤ 在WPF应用程序中,想要实现软件重启,可以再Start一次该软件的exe程序。 但是有些时候我们想要这个程序是唯一运行

WPF/C#:实现导航功能

前言 在WPF中使用导航功能可以使用Frame控件,这是比较基础的一种方法。前几天分享了wpfui中NavigationView的基本用法,但是如果真正在项目中使用起来,基础的用法是无法满足的。今天通过wpfui中的mvvm例子来说明在wpfui中如何通过依赖注入与MVVM模式使用导航功能。实践起来

WPF/C#:在WPF中如何实现依赖注入

本文先介绍依赖注入的概念,再解释为什么要进行依赖注入,最后通过 WPF Gallery 这个项目学习如何在WPF中使用依赖注入。

WPF网格类型像素着色器

由于WPF只能写像素着色器,没法写顶点着色器,所以只能在这上面做文章了 刚好有个纹理坐标TEXCOORD输入可用,而且值的范围是已知的0-1,左上角是原点,这就好办了 例子 索引 二分网格 使用ceil 0-1移动定义域到-0.5 - 0.5,然后向上取整变成 0 / 1 float4 main(f

在WPF中使用着色器

概念类比 范畴 CPU GPU 二进制文件 .exe .cso / .ps 二进制指令 机器码 CSO(shader指令) 助记符 汇编 SL 高级语言 C# HLSL 高级语言文件 .cs .hlsl / .fx 高级语言编译器 csc.exe fxc.exe API .NET API Direc

WPF/C#:如何实现拖拉元素

前言 在Canvas中放置了一些元素,需要能够拖拉这些元素,在WPF Samples中的DragDropObjects项目中告诉了我们如何实现这种效果。 效果如下所示: 拖拉过程中的效果如下所示: 具体实现 xaml页面 我们先来看看xaml:

WPF 做一个超级简单的 1024 数字接龙游戏

这是一个我给自己做着玩的游戏,没有什么复杂的界面,就一些简单的逻辑 游戏的规则十分简单,那就是有多个列表。程序会给出一个数字,玩家决定数字放在哪个列表里面。如果放入列表里面的数字和列表里面最后一个数字相同,那两个数字将会叠加进行合并,合并两个 1024 将会自动清理掉整个列表 如下图,有 5 个列表

WPF/C#:数据绑定到方法

在WPF Samples中有一个关于数据绑定到方法的Demo,该Demo结构如下: 运行效果如下所示: 来看看是如何实现的。 先来看下MainWindow.xaml中的内容:

WPF/C#:显示分组数据的两种方式

前言 本文介绍自己在遇到WPF对数据进行分组显示的需求时,可以选择的两种方案。一种方案基于ICollectionView,另一种方案基于IGrouping。 基于ICollectionView实现 相关cs代码: [ObservableProperty] private ObservableColl

WPF/C#:如何将数据分组显示

WPF Samples中的示例 在WPF Samples中有一个关于Grouping的Demo。 该Demo结构如下: MainWindow.xaml如下: