C#的开发,目前遇到一个C#的需求
先调用开始方法,这个方法要先调用一个很长的循环,会造成UI阻塞,这个循环执行完了才能执行后面的代码,获取到结果数据
现在要增加一个Stop方法可以随时调用,随时中止这个循环的执行,我尝试把循环放到线程,但是后面拿结果的代码就没法处理了
怎么实现可以非阻塞等待一个线程执行完循环,还可以随时调用另外的Stop方法中止这个循环的运行,谢谢了
4条回答 默认 最新
- 压力桶 2023-10-08 08:01关注解决 无用评论 打赏 举报 编辑记录
- 我可是森森呢 2023-10-09 06:15关注解决 无用评论 打赏 举报
- 监狱和高墙 2023-10-09 07:04关注
要实现在一个线程执行循环的同时,能够随时中止该循环的运行,可以使用C#的多线程编程和线程控制机制。您可以使用CancellationToken来实现这个目标。以下是一个示例代码
using System; using System.Threading; using System.Threading.Tasks; class Program { private static CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); static void Main() { Console.WriteLine("Press Enter to start the loop."); Console.ReadLine(); // 启动一个新线程来执行循环 Task.Run(() => LongRunningLoop(cancellationTokenSource.Token)); // 当用户按下 Enter 键时,停止循环 Console.WriteLine("Press Enter to stop the loop."); Console.ReadLine(); cancellationTokenSource.Cancel(); Console.WriteLine("Loop stopped. Press Enter to exit."); Console.ReadLine(); } static void LongRunningLoop(CancellationToken cancellationToken) { try { while (!cancellationToken.IsCancellationRequested) { // 执行循环的工作,这里可以是耗时的操作 Console.WriteLine("Working in the loop..."); // 模拟耗时操作 Thread.Sleep(1000); } } catch (OperationCanceledException) { Console.WriteLine("Loop canceled."); } } }
在此示例中,我们使用CancellationTokenSource和CancellationToken来控制循环的运行。当用户按下 Enter 键时,cancellationTokenSource.Cancel()被调用,从而触发OperationCanceledException,并退出循环。
解决 无用评论 打赏 举报