C# 控制台程序实现定时自动退出

一、基础实现方式:同步阻塞等待

通过Thread.Sleep暂停主线程,适合简单场景(需阻塞当前线程)。

static void Main(string[] args)
{
    Console.WriteLine("程序启动,5秒后自动退出...");
    Thread.Sleep(5000); // 阻塞5秒
    Environment.Exit(0); // 确保进程终止
}

‌特点‌:

代码简单,无需复杂逻辑
主线程完全阻塞,无法执行其他操作
适用场景:无需交互的后台任务


二、后台计时器方案:非阻塞式延迟

使用System.Threading.Timer实现后台计时,主线程可继续执行其他任务。

static void Main(string[] args)
{
    Console.WriteLine("程序运行中,3秒后自动关闭...");
    
    // 创建计时器(延迟3秒,只触发一次)
    Timer exitTimer = new Timer(_ => 
    {
        Console.WriteLine("时间到,程序退出");
        Environment.Exit(0);
    }, null, 3000, Timeout.Infinite);

    // 主线程可继续处理其他逻辑
    Console.ReadKey(); // 保持程序运行
}

‌特性‌:

非阻塞,主线程可响应其他操作
需手动保持程序运行(如Console.ReadKey())
适用场景:需同时执行任务的守护进程


三、异步编程实现:现代推荐方案

通过Task.Delay实现异步等待(.NET Framework 4.5+ / .NET Core)。

static async Task Main(string[] args) // C# 7.1+ 支持异步Main
{
    Console.WriteLine("10秒后自动关闭");
    
    // 启动异步任务
    var exitTask = Task.Run(async () => 
    {
        await Task.Delay(10000);
        Environment.Exit(0);
    });

    // 主线程可并行处理其他逻辑
    while (true) 
    {
        Console.Write(".");
        await Task.Delay(500); // 模拟工作
    }
}

‌特性‌:

完美整合异步操作
支持Ctrl+C提前终止
 适用场景:现代控制台应用(.NET 5+)


四、带倒计时显示的高级方案

实时显示剩余时间,提升用户体验。

static void Main(string[] args)
{
    int totalSeconds = 10;
    Console.CursorVisible = false;

    for (int i = totalSeconds; i > 0; i--)
    {
        Console.Write($"剩余时间:{i}秒  ");
        Thread.Sleep(1000);
        Console.SetCursorPosition(0, Console.CursorTop);
    }
    
    Console.WriteLine("\n时间到,程序终止");
    Environment.Exit(0);
}

‌效果‌:

剩余时间:5秒  
(每秒刷新数字)

五、方案对比与选型建议

‌方法‌    ‌            线程模型‌            可交互性        复杂度        适用版本
Thread.Sleep    同步阻塞            不可交互        一星            全平台兼容
System.Timer    异步回调            可交互        二星            .NET Framework 2.0+
Task.Delay        异步非阻塞        可交互        三星            .NET 4.5+/Core
倒计时循环        同步阻塞            不可交互        二星            全平台兼容


‌选型指南‌:

‌简单脚本工具‌ → Thread.Sleep
‌需要后台处理‌ → System.Threading.Timer
‌现代异步应用‌ → Task.Delay + 异步Main
‌需要用户提示‌ → 倒计时方案


六、注意事项

1、资源释放‌:使用Timer时需调用Dispose(),避免内存泄漏

exitTimer?.Dispose();

‌2、提前退出控制‌:可结合CancellationToken实现优雅终止

var cts = new CancellationTokenSource();
Task.Delay(5000, cts.Token).ContinueWith(_ => Exit());
Console.ReadKey();
cts.Cancel(); // 取消自动退出

‌3、跨平台兼容‌:.NET Core推荐使用Task.Delay代替Thread.Sleep

通过灵活组合这些方案,可满足从简单定时退出到复杂交互场景的全方位需求。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn_aspnet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值