我试图用状态模式制作一个停止灯,所以在我的主窗口上,我为每种浅色状态创建了三个椭圆。在主窗口中,我还有一个按钮,可以向灯光上下文发出请求。
private void startButton_Click(object sender, RoutedEventArgs e)
{
LightContext lc = new LightContext(new RedLight(),this);
lc.Request();
System.Threading.Thread.Sleep(3000);
lc.Request();
System.Threading.Thread.Sleep(3000);
lc.Request();
}
我设置的方法是在创建上下文后,它会发出第一个请求,应该将灯光设置为红色并将其他两个灯光变灰,然后系统将睡眠三秒钟,另一个请求变为绿色,然后是黄色,然后是红色。我遇到的问题是颜色在最后一次请求之前不会改变。这会使光线变回红色,因此看起来光线从未改变过。如果我发表评论说最后一个请求,一旦两个请求完成,指示灯会变黄?如何在每个请求上进行灯光更改然后睡眠,这样您就可以轻松看到灯光变换颜色。
public LightState LightState
{
get { return lightState; }
set
{
SolidColorBrush mySolidColorBrush = new SolidColorBrush();
lightState = value;
if (lightState.GetType().Name == nameof(RedLight))
{
mainWindow.RedLight.Fill = new SolidColorBrush(System.Windows.Media.Colors.Red);
mainWindow.YellowLight.Fill = new SolidColorBrush(System.Windows.Media.Colors.LightGray);
mainWindow.GreenLight.Fill = new SolidColorBrush(System.Windows.Media.Colors.LightGray);
}
else if (lightState.GetType().Name == nameof(YellowLight))
{
mainWindow.YellowLight.Fill = new SolidColorBrush(System.Windows.Media.Colors.Yellow);
mainWindow.GreenLight.Fill = new SolidColorBrush(System.Windows.Media.Colors.LightGray);
mainWindow.RedLight.Fill = new SolidColorBrush(System.Windows.Media.Colors.LightGray);
}
else if (lightState.GetType().Name == nameof(GreenLight))
{
mainWindow.GreenLight.Fill = new SolidColorBrush(System.Windows.Media.Colors.Green);
mainWindow.RedLight.Fill = new SolidColorBrush(System.Windows.Media.Colors.LightGray);
mainWindow.YellowLight.Fill = new SolidColorBrush(System.Windows.Media.Colors.LightGray);
}
}