创建一个交通灯 TrafficLight程序 使用异步方法打印颜色切换 红 --(10s)-- 黄 黄 --(3s)--绿 绿 --(15s)-- 黄 黄 --(3s)-- 红 用c#
时间: 2024-09-30 16:00:54 浏览: 36
基于MCS-51的交通灯程序设计(c语言控制直行左转)
创建一个交通灯(TrafficLight)程序,我们可以使用C#的异步和定时任务来模拟颜色的切换。首先,我们定义一个`TrafficLight`类,包含三个状态属性和颜色切换方法:
```csharp
using System;
using System.Threading.Tasks;
public class TrafficLight
{
private string color = "Red";
private readonly TimeSpan redDuration = TimeSpan.FromSeconds(10);
private readonly TimeSpan yellowDuration = TimeSpan.FromSeconds(3);
private readonly TimeSpan greenDuration = TimeSpan.FromSeconds(15);
public event Action<string> ColorChanged;
public async Task Start()
{
while (true)
{
switch (color)
{
case "Red":
Console.WriteLine("当前颜色:红");
await Task.Delay(redDuration);
color = "Yellow";
OnColorChange();
break;
case "Yellow":
Console.WriteLine("当前颜色:黄");
await Task.Delay(yellowDuration);
color = "Green";
OnColorChange();
break;
case "Green":
Console.WriteLine("当前颜色:绿");
await Task.Delay(greenDuration);
color = "Yellow";
OnColorChange();
break;
default:
throw new InvalidOperationException($"Invalid color: {color}");
}
}
}
private void OnColorChange()
{
ColorChanged?.Invoke(color);
}
}
```
为了演示颜色的变化,你可以这样使用这个类:
```csharp
class Program
{
static async Task Main(string[] args)
{
TrafficLight trafficLight = new TrafficLight();
trafficLight.ColorChanged += ColorChangedHandler; // 订阅事件
await trafficLight.Start(); // 开始循环颜色切换
}
static void ColorChangedHandler(string color)
{
Console.WriteLine($"{DateTime.Now}: 交通灯变为{color}.");
}
}
```
当运行这个程序,你会看到交通灯按照红、黄、绿、黄的顺序每隔相应的秒数变化颜色,并输出时间。
阅读全文