当前位置: 首页 > news >正文

Program.cs代码详细解释

带详细注释的 Program.cs 完整代码

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Windows.Forms;namespaceSFP模块终测检查软件{/// <summary>/// 程序入口类/// 整个程序从这里开始执行,相当于"大门"/// </summary>staticclassProgram{/// <summary>/// 互斥量(Mutex)/// 作用:防止同一个程序同时运行多个实例/// 原理:程序启动时创建一把"锁",如果锁已经存在,说明已经有程序在运行了/// </summary>privatestaticSystem.Threading.Mutexmutex;/// <summary>/// 应用程序的主入口点/// 程序启动后第一个执行的函数/// </summary>[STAThread]// 特性:表示程序使用单线程单元模型(WinForms必须加这个)staticvoidMain(){// ============================================================// 第一步:初始化界面样式// ============================================================// 启用 Windows 视觉样式// 作用:让按钮、文本框、单选框等控件使用系统默认的美化样式// 如果不加这行,控件会是很丑的经典灰色样式Application.EnableVisualStyles();// 设置文本渲染方式// 参数 false:使用 GDI+ 渲染文本(效果更好,更清晰)// 参数 true:使用旧的 GDI 渲染文本(兼容性更好,但效果差一些)Application.SetCompatibleTextRenderingDefault(false);// ============================================================// 第二步:检查程序是否已经在运行(防止重复启动)// ============================================================// 定义变量:标记互斥量是不是"新创建"的// true = 互斥量是新创建的 → 之前没有程序在运行// false = 互斥量已经存在了 → 已经有程序在运行了boolcreatedNew;// 创建互斥量(Mutex)// 参数1:true → 调用者拥有互斥量的初始所有权// 参数2:互斥量的名字,用程序名作为名字,保证全局唯一// 参数3:out 输出参数,返回互斥量是不是新创建的mutex=newSystem.Threading.Mutex(true,System.Diagnostics.Process.GetCurrentProcess().ProcessName,// 获取当前程序的进程名outcreatedNew);// ============================================================// 第三步:判断是否已经有程序在运行// ============================================================// 如果 createdNew = false → 互斥量已经存在 → 已经有程序在运行了// !createdNew 就是"不是新创建的" = "已经存在了"if(!createdNew){// 弹出提示框,告诉用户不能重复运行MessageBox.Show("已经运行了本测试程序,不能重复运行,请检查确认。",// 提示内容"提示",// 标题MessageBoxButtons.OK,// 按钮类型:只有确定按钮MessageBoxIcon.Warning);// 图标:警告图标// 退出程序Application.Exit();}// ============================================================// 第四步:程序正常启动流程// ============================================================else{// 创建主窗体对象(但还不显示)Main_Formmain_Form=newMain_Form();// 创建登录窗体对象Login_Formlogin_Form=newLogin_Form();// 显示登录窗体(模态对话框)// ShowDialog() 的特点:// 1. 这个窗体不关掉,后面的代码就不会执行// 2. 用户只能操作这个窗体,不能点后面的主窗体// 3. 关闭后会返回一个 DialogResult,表示用户是点了确定还是取消login_Form.ShowDialog();// ========================================================// 第五步:判断登录是否成功// ========================================================// 如果登录窗体返回的是 OK(用户点了确定/登录按钮)if(login_Form.DialogResult==DialogResult.OK){// 运行主窗体(程序正式开始,进入主界面)// Application.Run() 会启动消息循环,让窗体保持显示并响应用户操作// 直到用户关闭主窗体,程序才会结束Application.Run(main_Form);}// 如果用户点了取消或者直接关了登录窗口// 就什么也不做,程序直接结束}}}}

我做了几处优化

1. 变量名改了

把容易误导人的isAppRunning改成了createdNew,一看就知道是"是不是新创建的"。

2. 去掉了重复代码

原来Application.EnableVisualStyles()调用了两次,现在只保留一次。

3. 加了更详细的注释

每一段代码都有:

  • 这一段是干什么的
  • 每个参数是什么意思
  • 为什么要这么写

4. 优化了 MessageBox

MessageBox.Show()加上了标题、按钮类型、图标参数,更规范。

http://www.jsqmd.com/news/1114811/

相关文章:

  • DedeCMS 5.7文件上传漏洞深度剖析:从黑名单绕过到防御体系构建
  • ASP.NET Forms身份认证配置与安全实践指南
  • OpenSpeedy终极指南:如何快速实现Windows进程加速引擎
  • 特斯拉FSD是L2+辅助驾驶,不是自动驾驶
  • 3步掌握网页文本自定义:打造个性化浏览体验的终极指南
  • 收藏!普通人也能轻松入局AI大模型红利时代,高薪就业新方向!
  • Adobe软件快速激活终极指南:3分钟解锁Photoshop等全套专业工具
  • L3级自动驾驶购车决策指南:ODD边界、责任划分与真实使用成本
  • 图片锚文本SEO效果:加个Alt标签,网站收录率直接多20%
  • 软考备考周期真相:全日制考生平均需217小时,但83%在职者只需142小时——关键在「认知负荷压缩率」(独家算法首次披露)
  • 汽车电子散热系统设计:DRV8213与PIC18F24K50的黄金组合
  • Nintendo Switch游戏文件管理终极指南:NSC_BUILDER从入门到精通
  • 软考命题组内部流出的7类高频干扰项设计逻辑:如何3秒识别错误选项,正确率提升41.6%
  • 腾讯会议多端接入音视频稳定保障实践
  • 全国化判断模型:区域食品品牌复制能力如何评估
  • AI绘画时代艺术家的四层防护与生存策略
  • 专科生必备AI工具指南:提升就业竞争力的实战方案
  • EM3080-W与PIC18LF47K42的嵌入式条码识别方案
  • 为什么有些论文,老师在PPT介绍中就形成稳定判断?
  • 性能测试|Apache服务器性能监控调优分析
  • 告别音乐枷锁:QMCDecode帮你一键解密QQ音乐13种加密格式 [特殊字符]
  • 中国自动驾驶标准出海:不是文本输出,而是问题定义能力的全球扩散
  • “所有界面,为啥都得先有一块‘板‘?“:Canvas 画布的根容器之道
  • Java计算机毕设之校园线上答题测评与学习巩固管理系统的设计与实现 基于 SpringBoot 的分层次学生答题练习平台(完整前后端代码+说明文档+LW,调试定制等)
  • AFL++ GUI程序模糊测试实战:突破图形界面限制的漏洞挖掘指南
  • 中小企业老板必看:收藏!本地大模型服务器值不值得买?
  • 2026四省新高考指南:一位资深程序员的志愿整理方法
  • 文档下载的困境与解放:一款开源工具的智能解决方案
  • 收藏!2026年AI、新能源等高薪赛道抢人大战,小白转行必看机遇指南
  • 嵌入式键盘管理:74HC32与MKV44F256VLH16硬件方案解析