Winform启动检查---引申---退出关闭所有线程对比

本文探讨了在C#中如何在程序启动时检查是否存在相同进程,并提供了两种处理策略:激活现有进程或启动新实例。同时,文章提到了在退出程序时确保线程和资源被正确关闭的重要性,包括使用`Application.Exit`、`Environment.Exit`等方法以及线程管理的注意事项。
摘要由CSDN通过智能技术生成

程序启动检查引申

方案一:启动时,检查设备中是否有残留进程。

/// <summary>
    /// 获取当前是否具有相同进程。
    /// </summary>
    /// <returns></returns>
    public static Process GetRunningInstance()
    {
        Process current = Process.GetCurrentProcess();
        Process[] processes = Process.GetProcessesByName(current.ProcessName);
        //遍历正在有相同名字运行的例程   
        foreach (Process process in processes)
        {
            if (process.Id != current.Id)
                if (System.Reflection.Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName)
                    return process;
        }
        return null;
    }

有进程的时候又要思考,是使用之前的进程,还是启用新开的程序?
当然是根据需要了

方法一:激活原有的进程

    /// 激活原有的进程。
    /// </summary>
    /// <param name="instance"></param>
    public static void HandleRunningInstance(Process instance)
    {
        ShowWindowAsync(instance.MainWindowHandle, 		  WS_SHOWMaximized);
        SetForegroundWindow(instance.MainWindowHandle);
    }
    private const int WS_SHOWNORMAL = 1;
    private const int WS_SHOWMinimized = 2;
    private const int WS_SHOWMaximized = 3;
    [DllImport("User32.dll")]
    private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
    [DllImport("User32.dll")]
    private static extern bool SetForegroundWindow(IntPtr hWnd)

方法二:
干掉老皇帝,重新树立新皇:

curPro.Kill();
Application.EnableVisualStyles();
     Application.SetCompatibleTextRenderingDefault(false);
      Application.Run(new Form1());

但是吧,有时候我们是想退出程序,但是没有退干净造成的残留,这就尴尬了

C# 在关闭窗体时 关闭窗体的所有线程,使程序退出。

this.close();

只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出;

Application.Exit();

强制所有消息中止,退出所有的窗体,但是若有托管线程(非主线程),也无法干净地退出;

Application.ExitThread();

强制中止调用线程上的所有消息,同样面临其它线程无法正确退出的问题;

System.Environment.Exit(0);

这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。
当然也有在退出的时候把所有的线程,页面挨个梳理一遍并关闭的,只要页面不多,线程管理适当,其实也行哈

主要是给自己做个笔记。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值