Как я могу замедлить цикл, чтобы я мог видеть цвета? - PullRequest
2 голосов
/ 08 октября 2019

Я хочу отложить цикл, чтобы он отображал цвета фона, которые я вставил. Теперь это просто быстро. Цель состоит в том, чтобы позволить цветам мигать как дискотека. я использовал Thread.sleep, но это просто не работает.

private void Disco(object sender, RoutedEventArgs e)
    {
           for (int n =0; n<=10;n++)
           {
               Background = Brushes.Coral;
               Background = Brushes.AliceBlue;
               Background = Brushes.DarkRed;
               Background = Brushes.Red;
               Background = Brushes.Blue;
               Background = Brushes.Aquamarine;
           }
       }

Ответы [ 2 ]

1 голос
/ 08 октября 2019

Вы можете использовать метод async, который @Jeroen van Langen предложил в комментариях.

Использование await Task.Delay(time) в промежутке между Background изменениями задержит изменения на данный time.

private async void Disco(object sender, RoutedEventArgs e)
{
    Background = Brushes.Coral;
    await Task.Delay(500); // 500 is just an example. You can use any number in milliseconds.
    Background = Brushes.AliceBlue;
    await Task.Delay(500);
    Background = Brushes.DarkRed;
    await Task.Delay(500);
    Background = Brushes.Red;
    await Task.Delay(500);
    Background = Brushes.Blue;
    await Task.Delay(500);
    Background = Brushes.Aquamarine;
    await Task.Delay(500);
    //Set the background back to its original color here.
}

Если вам нужно, чтобы ваша форма продолжала «диско», например, до тех пор, пока кнопка не будет нажата снова, вы можете заключить ее в цикл while, который будет продолжаться до тех пор, пока Button не будетили нажмите ToggleButton.

Если вы пойдете по этому пути, я предлагаю вам прочитать документацию по асинхронному программированию . Это очень полезно.

0 голосов
/ 08 октября 2019

Этот код работает для mi и меняет цвет Back каждые 5 секунд:

    public partial class Form1 : Form
        {
            /// 
            /// a list of colors to control the sequence
            /// </p>

<code>        Color[] colorsList = { Color.Coral, Color.AliceBlue, Color.DarkRed, Color.Red, Color.Blue, Color.Aquamarine };

        /// <summary>
        /// Timer to control the execution time of the color change
        /// </summary>
        System.Timers.Timer myTimer = new System.Timers.Timer();
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// Load or Main of class
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {
            this.BackColor = colorsList[0];
            myTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
            myTimer.Interval = 5000;
            myTimer.Start();
        }

        /// <summary>
        /// method that changes the color, executed by the timer
        /// </summary>
        /// <param name="source"></param>
        /// <param name="e"></param>
        private void OnTimedEvent(object source, ElapsedEventArgs e)
        {            
            for (int i = 0; i < colorsList.Length; i++)
            {
                if (this.BackColor == colorsList[i])
                {
                    if (i < colorsList.Length - 1)
                    {
                        this.BackColor = colorsList[i + 1];
                        break;
                    }
                    else
                    {
                        //return to the first color
                        this.BackColor = colorsList[0];
                        break;
                    }
                }
            }
        }
    }
</code>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...