zoukankan
html css js c++ java
创建单例winform应用程序
方法1:
using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; using System.Threading; using System.Reflection; static class Program { private static Mutex singleton; /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); bool has=Check() ; if (has) { Form form = new Form1(); form.FormClosed += new FormClosedEventHandler(form_FormClosed); Application.Run(form); } else { MessageBox.Show("程序已启动"); } } static void form_FormClosed(object sender, FormClosedEventArgs e) { if (singleton != null) { singleton.Close(); } } private static bool Check() { bool has=false; singleton=new Mutex(false,Assembly.GetExecutingAssembly().FullName,out has); // Assembly.GetExecutingAssembly().GetModules()[0].FullyQualifiedName; return has; } } }
方法2:
static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Process instance = RunningInstance(); //Get the running instance. if (instance == null) { //There isn 't another instance, show our form. Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); } else { Message.WriteErrMsg("程序已运行,请勿再次运行!"); } } public static Process RunningInstance() { Process current = Process.GetCurrentProcess(); Process[] processes = Process.GetProcessesByName(current.ProcessName); //Loop through the running processes in with the same name foreach (Process process in processes) { //忽略当前进程<strong> </strong> if (process.Id != current.Id) { //Make sure that the process is running from the exe file. if (Assembly.GetExecutingAssembly().Location.Replace("/ ", "\\ ") == current.MainModule.FileName) { //Return the other process instance. return process; } } } //No other instance was found, return null. return null; } }
方法1:不能避免多用户时的情况,多用户登陆系统时,还是可以开启多个实例的。
方法2:检查系统进程,可以解决多用户的问题,推荐方法2.
查看全文
相关阅读:
ThreadPoolExecutor线程池参数设置技巧
函数式接口
Mac下进入MySQL命令行
Java8 特性
Java8 :: 用法 (JDK8 双冒号用法)
事务传播
新版IDEA配置tomcat教程(2018)
Java8 Map的compute()方法
Spring 普通类与工具类调用service层
简单工厂(三)——JDK源码中的简单工厂
原文地址:https://www.cnblogs.com/zhangqs008/p/2341101.html
最新文章
【计算机组成原理】中央处理器CPU
【计算机组成原理】指令系统-寻址
【计算机组成原理】指令系统(一)
【刷题】计算机组成原理:存储器(转)
【刷题】计算机组成原理--数据的表示及其运算(转)
【计算机组成原理】海明码
【数据结构与算法】时间复杂度和空间复杂度
【数据结构与算法】第二章练习题
【数据结构与算法】单链表操作(C++)
【数据结构与算法】线性表操作(C++)
热门文章
字符型图片验证码识别完整过程及Python实现
Mac-OSX的Python3.5虚拟环境下安装Opencv
linux用户权限相关内容查看
安全防范:nginx下git引发的隐私泄露问题
安全防范:服务器连接及权限处理
Ubuntu部署python3.7的开发和运行环境
Web应用多账号系统设计及微信扫码登录实现
你的服务器安全么?--服务器防渗透(1)
让linux好用起来--操作使用技巧
打造程序员的高效生产力工具-mac篇
Copyright © 2011-2022 走看看