在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
調試技巧:
- 防止Visual Studio調試時退出:
Sub Main()If Debugger.IsAttached ThenConsole.WriteLine("調試模式 - 按任意鍵退出")Console.ReadKey()End IfEnd Sub
- 作為服務安裝(使用SC命令):
sc create MyService binPath="C:\Path\To\YourApp.exe" sc start MyService
選擇方案的建議:
- 臨時調試:使用
Console.ReadKey()
- 后臺服務:使用無限循環或轉換為Windows服務
- 生產環境:推薦Windows服務方案(方法4)
注意:長期運行的程序需要添加適當的異常處理,避免因未處理異常導致意外退出。