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

.NET控制台应用程序中防止程序立即退出

在VB.NET控制台应用程序中防止程序立即退出,主要有以下几种常用方法,根据需求选择适合的方案:

方法1:等待用户输入(推荐)

Module Module1Sub Main()Console.WriteLine("程序开始运行...")' 这里是你的主程序逻辑DoWork()Console.WriteLine("按任意键退出程序...")Console.ReadKey() ' 等待用户按键End SubSub DoWork()' 你的业务逻辑代码Console.WriteLine("正在执行任务...")End Sub
End Module
### 方法2:无限循环(适用于后台服务)
Dim running As Boolean = TrueSub Main()Console.CancelKeyPress += Sub(sender, e)e.Cancel = True ' 防止Ctrl+C直接终止running = FalseEnd SubWhile running' 主循环逻辑Console.WriteLine($"{DateTime.Now}: 执行中...")Threading.Thread.Sleep(1000) ' 每秒执行一次End WhileConsole.WriteLine("程序正常退出")
End Sub

方法3:使用消息循环(适合GUI集成)

' 需要添加对System.Windows.Forms的引用
Sub Main()Console.WriteLine("服务已启动")Application.Run() ' 创建Windows消息循环' 在需要退出的地方调用 Application.Exit()
End Sub

方法4:自定义退出条件

Sub Main()Dim exitCode As Integer = 0DoTry' 执行主要逻辑ProcessData()Catch ex As ExceptionexitCode = 1running = FalseEnd TryThreading.Thread.Sleep(500) ' 避免CPU占用过高Loop While runningEnvironment.Exit(exitCode)
End Sub

高级方案:转换为Windows服务

' 需要安装 NuGet 包: Microsoft.Extensions.Hosting.WindowsServices
Imports Microsoft.Extensions.HostingModule ProgramSub Main(args As String())CreateHostBuilder(args).Build().Run()End SubPublic Function CreateHostBuilder(args As String()) As IHostBuilderReturn Host.CreateDefaultBuilder(args).UseWindowsService() ' 启用Windows服务支持.ConfigureServices(Sub(services)services.AddHostedService(Of WorkerService)()End Sub)End Function
End ModulePublic Class WorkerServiceInherits BackgroundServiceProtected Overrides Async Function ExecuteAsync(stoppingToken As CancellationToken) As TaskWhile Not stoppingToken.IsCancellationRequested' 持续执行的后台任务Await Task.Delay(1000, stoppingToken)End WhileEnd Function
End Class

调试技巧:

  1. 防止Visual Studio调试时退出
   Sub Main()If Debugger.IsAttached ThenConsole.WriteLine("调试模式 - 按任意键退出")Console.ReadKey()End IfEnd Sub
  1. 作为服务安装(使用SC命令):
    sc create MyService binPath="C:\Path\To\YourApp.exe"
    sc start MyService
    

选择方案的建议:

  • 临时调试:使用 Console.ReadKey()
  • 后台服务:使用无限循环或转换为Windows服务
  • 生产环境:推荐Windows服务方案(方法4)

注意:长期运行的程序需要添加适当的异常处理,避免因未处理异常导致意外退出。

http://www.dtcms.com/a/278999.html

相关文章:

  • Flask服务器公外网访问,IPv6(亲测有效!!!!)
  • 网络编程(TCP连接)
  • .NET ExpandoObject 技术原理解析
  • LeetCode经典题解:206、两数之和(Two Sum)
  • OV-DINO:基于语言感知选择性融合的统一开放词汇检测
  • 深入解析ThreadLocal:线程隔离利器
  • C#自定义控件
  • c# 深度解析:实现一个通用配置管理功能,打造高并发、可扩展的配置管理神器
  • Typecho加密文章HTML结构自定义完全指南
  • 在 Windows 主机和 VMware 虚拟机中的 Ubuntu 系统之间实现复制粘贴,
  • Spring IoC 容器实战:从解耦到集成的 6 大核心应用场景
  • 【PTA数据结构 | C语言版】字符串插入操作(不限长)
  • 微前端框架深度对决:qiankun、micro-app、wujie 技术内幕与架构选型指南
  • Ubuntu-25.04 Wayland桌面环境安装Anaconda3之后无法启动anaconda-navigator问题解决
  • 如何降低AIGC的查重率?精选六个AIGC降重让论文更出色
  • Spring Boot项目结构解析:构建高效、清晰的代码框架
  • 【Python进阶】深度复制——deepcopy
  • STM32F1_Hal库学习EXTI
  • 苍穹外卖学习指南(java的一个项目)(老师能运行,但你不行,看这里!!)
  • 最近要上Android 15的高通平台,按照之前Android14的高通平台的裁剪APP的方法修改,发现一改编译之后就不能进系统
  • LLaMA.cpp HTTP 服务参数: --pooling 嵌入模型 池化类型详解
  • 笔试——Day7
  • Datawhale AI夏令营大模型 task2.1
  • QML 常用控件(二)
  • Qt小组件 - 3 imageLabel
  • 【CV综合实战】基于深度学习的工业压力表智能检测与读数系统【3】使用OpenCV读取分割后的压力表读数
  • 《C++内存泄漏8大战场:Qt/MFC实战详解 + 面试高频陷阱破解》
  • 机器学习中的朴素贝叶斯(Naive Bayes)模型
  • AI日报 - 2025年07月14日
  • 认识下计算机视觉中的人脸识别