c#循环30秒执行一个操作并读秒
时间: 2024-10-24 19:18:37 浏览: 39
在 C# 中,你可以使用 `System.Timers.Timer` 类或者 `Task.Delay` 和 `async` 关键字结合来实现定时30秒执行一个操作并显示剩余时间的功能。这里给出两种方法:
**1. 使用 Timer 类:**
```csharp
using System;
using System.Timers;
class Program
{
private static Timer timer;
public static void Main()
{
timer = new Timer(30000); // 30000毫秒等于30秒
timer.Elapsed += OnTimedEvent;
timer.Start();
Console.WriteLine("等待30秒...");
while (true)
{
Console.Write("秒:");
if (Console.KeyAvailable)
{
Console.ReadKey();
break; // 用户按下任意键结束程序
}
}
timer.Stop();
}
private static void OnTimedEvent(object sender, ElapsedEventArgs e)
{
Console.WriteLine($"已过 {e.SignalTime - DateTime.Now.TotalSeconds} 秒");
}
}
```
在这个例子中,当计时器触发 `Elapsed` 事件时,会调用 `OnTimedEvent` 方法更新秒数。
**2. 使用 Task.Delay + async/await:**
```csharp
using System.Threading.Tasks;
using System.Timers;
class Program
{
private static CancellationTokenSource _cts;
public static async Task Main()
{
var token = _cts.Token; // 创建一个CancellationTokenSource用于取消操作
Console.WriteLine("等待30秒...");
_cts = new CancellationTokenSource(TimeSpan.FromSeconds(30));
await ExecuteWithDelay(token);
Console.WriteLine("操作已结束");
}
private static async Task ExecuteWithDelay(CancellationToken token)
{
try
{
for (int i = 30; i >= 0; i--)
{
Console.Write($"{i}秒 ");
await Task.Delay(1000, token);
token.ThrowIfCancellationRequested(); // 检查是否被取消
}
}
catch (OperationCanceledException)
{
Console.WriteLine("\n操作已取消");
}
}
}
```
在这个示例中,`ExecuteWithDelay` 方法会在每一秒执行一次 `Task.Delay`,如果用户在30秒内按下Ctrl+C,程序会捕获 `OperationCanceledException` 并停止执行。
阅读全文