如何在C# Console中运行while无限循环同时执行后续代码
解决方案
你原来的同步无限循环会阻塞当前主线程,所以循环下方的代码永远无法执行,只需要把修改标题的逻辑放到独立的后台任务/线程中运行,就能同时执行其他代码了。
推荐实现(Task.Run 异步方案)
using System; using System.Threading; using System.Threading.Tasks; class Program { static void Main(string[] args) { // 启动后台任务运行标题切换逻辑,不会阻塞主线程 _ = RunTitleSwitchLoop(); // 这里可以写你需要执行的其他代码,不会被上面的循环阻塞 Console.WriteLine("主线程其他逻辑开始运行..."); Console.ReadLine(); } static async Task RunTitleSwitchLoop() { // Random 提到循环外实例化,避免短时间生成重复随机值 Random rnd = new Random(); string[] palavras = { "hi", "2", "bye", "ok", "nah", "idk", "done", "local", "can you", "bruh", "example", "nope", "hehe" }; while (true) { // 用Task.Delay代替Thread.Sleep,不会阻塞线程 await Task.Delay(100); int index = rnd.Next(palavras.Length); Console.Title = palavras[index]; } } }
线程实现方案(可选)
如果你更习惯用Thread类实现,也可以用下面的写法:
using System; using System.Threading; class Program { static void Main(string[] args) { Thread titleThread = new Thread(SwitchTitleLoop); // 设置为后台线程,程序退出时会自动销毁 titleThread.IsBackground = true; titleThread.Start(); // 这里写其他业务逻辑 Console.WriteLine("其他逻辑正常运行..."); Console.ReadLine(); } static void SwitchTitleLoop() { Random rnd = new Random(); string[] palavras = { "hi", "2", "bye", "ok", "nah", "idk", "done", "local", "can you", "bruh", "example", "nope", "hehe" }; while (true) { Thread.Sleep(100); int index = rnd.Next(palavras.Length); Console.Title = palavras[index]; } } }
原有代码优化点说明
- 不要在循环内部实例化
Random:Random默认用系统时间作为种子,短时间多次实例化会生成相同的随机值,放到循环外只实例化一次即可 - 你代码里声明的
int[] numbs没有被使用,可以直接删除 - 异步方案中用
Task.Delay替代Thread.Sleep,可以减少线程资源占用
内容的提问来源于stack exchange,提问作者Bife
相关产品推荐
相关产品推荐

