1

Есть программа которая выбирает маршрут от одной станции метро к другой и отображает на карте которая сверстана в WPF. Путь отображается закрашиванием каждой станции в черный цвет. Необходимо установить задержку в цикле который их закрашивает.

System.Threading.Thread.Sleep(1000); Сперва вешает всю программу на столько секунд, сколько станций на пути от начальной до конечной, потом отрисовывает все скопом. Необходимо же выполнять закраску и задерживать выполнение постепенно. Как можно решить вопрос?

Скрин

Вот в этих двух циклах нужна задержка:

if (current_st.id < finish_st.id)
            while (current_st.id < finish_st.id)
            {
                current_st.obj.Fill = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0));
                current_st = current_st.next;
            }
        else
            while (current_st.id > finish_st.id)
            {
                current_st.obj.Fill = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0));
                current_st = current_st.prev;
            }

Заранее благодарен.

1 Answers1

0

Оператор await применяется к задаче в асинхронном методе для приостановки выполнения метода до завершения выполнения ожидаемой задачи. Задача представляет выполняющуюся работу.

Попробуйте написать await Task.Delay(countMilliseconds) <-- В вашем случае 1000.

Если будете использовать await, нужно будет написать ключевое слово async в объявлении метода:

public async void MyFunc()
{
    if (current_st.id < finish_st.id)
        while (current_st.id < finish_st.id)
        {
            current_st.obj.Fill = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0));
            current_st = current_st.next;

            await Task.Delay(countMilliseconds)
        }
    else
        while (current_st.id > finish_st.id)
        {
            current_st.obj.Fill = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0));
            current_st = current_st.prev;

            await Task.Delay(countMilliseconds)
        }
}
Philippe
  • 673