runxinzhi.com
首页
百度搜索
创建单例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.
相关阅读:
011 Go语言基础之map
009 Go语言基础之切片
计算机组成原理 — GPU 图形处理器
js 实现各浏览器全屏
js 实现各浏览器全屏
IIS-真正解决ASP.NET每一个页面首次访问超级慢的问题
IIS-真正解决ASP.NET每一个页面首次访问超级慢的问题
首次启动速度慢的问题记录IIS性能优化
首次启动速度慢的问题记录IIS性能优化
C#-执行cmd命令,获取结果
原文地址:https://www.cnblogs.com/zhangqs008/p/2341101.html
最新文章
ALG 3-2: Graph Connectivity & Graph Traversal (BFS)
ALG 3-1: Graph
ALG 2-n: Practice
链表中环的入口节点
链表相交的第一个节点
合并两个排序的链表
链表反转
链表倒数第k个节点
Python之sorted(list)和list.sort()
TwoSum
热门文章
基于R-CNN的两阶段目标检测
Batch-normalization
Linux-shell编写并运行脚本
018 Go语言基础之网络编程
017 Go语言基础之并发
016 Go语言基础之反射
015 Go语言基础之接口
014 Go语言基础之包
013 Go语言基础之结构体
010 Go语言基础之指针
Copyright © 2020-2023
润新知