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.
查看全文
相关阅读:
解读AppIcon图标设置置信息和App内存警告临界值
我在外包公司做增删改查有前途么?
浅议Grpc传输机制和WCF中的回调机制的代码迁移
2019.NET Conf China(中国.NET开发者峰会)活动全纪录:.NET技术之崛起,已势不可挡
一位年轻而优秀的.NET开发者的成长点滴
领域驱动设计-让程序员心中有码(九)
2019.NET Conf,我们在共同期待
码农的技术小世界
.NET Core使用gRPC打造服务间通信基础设施
坚持写了一年的博客,我有哪些收获
原文地址:https://www.cnblogs.com/zhangqs008/p/2341101.html
最新文章
python安装pip和使用pip安装Python库类比如pip安装beautifulsoup4
【转】SyntaxError: Non-ASCII character ‘xe5′ in file
python 学习之dict和set类型
Redis:Redis为什么是单线程的
MethodArgumentTypeMismatchException异常捕捉
@PostConstruct
mysql 实现经纬度排序查找功能
@Resource和@Autowired用谁?
git使用cherry-pick和revert抢救错误代码提交
spring boot 整合lombok+tkmapper+mybatis-generator
热门文章
Excel导出功能超时解决方案 -- 异步处理
JS面向对象笔记二
观《IT培训行业揭秘》触发北大青鸟回忆
记录C#常用的代码片段
CocoaAsyncSocket + Protobuf 处理粘包和拆包问题
2016《财经郎眼》年终盘点(中)--- 楼股双市
apns关于APP数字角标的理解
iOS10之Expected App Behaviors
iOS之ProtocolBuffer搭建和示例demo
记录下UIButton的图文妙用和子控件的优先显示
Copyright © 2011-2022 走看看