C#WPF,窗口省略号颜色更新没有发生,直到方法完全运行?

时间:2016-10-27 17:27:57

标签: c# wpf

我试图用状态模式制作一个停止灯,所以在我的主窗口上,我为每种浅色状态创建了三个椭圆。在主窗口中,我还有一个按钮,可以向灯光上下文发出请求。

 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);
            }

        }

0 个答案:

没有答案