dz增加网站标签,php网站怎么做的,wordpress qqoq主题,网站突然暴增流量C#默认的WinForm模板是不支持设置单实例的#xff0c;也没有隔壁大哥VB.NET那样有个“生成单个实例应用程序”的勾选选项#xff08;VB某些时候要比C#更方便#xff09;#xff0c;实现单实例可以有多种方法#xff1a; 检测同名进程#xff1a;Process.GetProcessesByNa…C#默认的WinForm模板是不支持设置单实例的也没有隔壁大哥VB.NET那样有个“生成单个实例应用程序”的勾选选项VB某些时候要比C#更方便实现单实例可以有多种方法 检测同名进程Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName)如果集合的Length 1那就表明已有同名进程了如果有需要还可以进一步检查该进程的路径 命名互斥锁Mutex网上介绍的很多都是这种方法 锁定文件使用File.Create方法创建文件并在程序退出时释放如果创建失败则表明已经有实例在运行 VB.NET方法WindowsFormsApplicationBase个人认为该方法最完美可以接收后续进程的启动参数还可以弹出前序进程的主窗体。 WindowsFormsApplicationBase是一个Microsoft.VisualBasic.ApplicationServices命名空间下的类是微软为VB.NET实现应用程序启动控制的类其内部是以命名管道通信来实现的。既然是同一个爹的东西C#拿过来用毫无违和感。Microsoft.VisualBasic和Microsoft.CSharp一样都是.NET Framework中的一部分不用担心会缺少运行环境。 WindowsFormsApplicationBase类的一些常用属性和方法 属性IsSingleInstance设置当前进程是否为单实例进程在构造方法中设置如果是后续进程且为值true构造方法结束后会给前序进程发送启动参数然后就退出进程了不会执行到下面的OnStartup 方法OnStartup首次启动后运行返回false就会退出进程后续进程永远不会运行到该方法 方法OnStartupNextInstance后续进程启动后的重写方法前序进程会接收到后续进程的启动参数弹出主窗体等 方法OnCreateMainForm创建主窗体的重写方法必须指定主窗体。 创建一个单实例应用程序并响应后续进程参数的大概过程 创建一个项目名称为“SingleInstanceSample”的Windows窗体项目 添加引用“Microsoft.VisualBasic” 重命名“Form1”为“MainForm” 添加类“ApplicationBase.cs”继承自“WindowsFormsApplicationBase” 修改“Program.cs”从“ApplicationBase”启动。 各个类的代码如下 Program.cs
using System;
using System.Windows.Forms;namespace SingleInstanceSample
{internal static class Program{[STAThread]static void Main(string[] args){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);var app new ApplicationBase();app.Run(args);}}
} ApplicationBase.cs
using Microsoft.VisualBasic.ApplicationServices;
using System.IO;namespace SingleInstanceSample
{internal class ApplicationBase : WindowsFormsApplicationBase{public ApplicationBase() : base(AuthenticationMode.Windows){//指示进程为单进程IsSingleInstancebase.IsSingleInstance true;base.SaveMySettingsOnExit true;base.ShutdownStyle ShutdownMode.AfterMainFormCloses;}/// summary/// 首次启动后的重写方法返回false就会退出进程/// 比如可以显示登录窗体登录失败返回false就不会运行到OnCreateMainForm/// /summaryprotected override bool OnStartup(StartupEventArgs eventArgs){base.OnStartup(eventArgs);//处理当前进程的启动参数return true;}/// summary/// 后续进程启动后的重写方法/// /summaryprotected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs){base.OnStartupNextInstance(eventArgs);//处理后续进程的启动参数}/// summary/// 指定主窗体/// 除非OnStartup返回false否则必须指定主窗体/// /summaryprotected override void OnCreateMainForm(){base.MainForm new MainForm();}}
} 文章转载自【一路向东】 原文链接https://www.cnblogs.com/yiluxiangdong/p/18288392 体验地址引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构