【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网格类型像素着色器

由于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如下:

WPF/C#:程序关闭的三种模式

ShutdownMode枚举类型介绍 ShutdownMode是一个枚举类型,它定义了WPF应用程序的关闭方式。这个枚举类型有三个成员: OnLastWindowClose:当最后一个窗口关闭或者调用System.Windows.Application.Shutdown方法时,应用程序会关闭。 On

WPF使用事件聚合器,实现任意页面跨页通信

前言:最近几天有好几个小伙伴玩WPF,遇到不同页面,不知道要怎么传递消息。于是,我今天就来演示一个事件聚合器的玩法,采用prism框架来实现。作为福利,内容附带了主页面打开对话框时候直接通过参数传递消息的一个小例子,具体请自行围观。 以下内容,创建wpf项目以及引用prism和实现依赖注入等细节,可