Как вы замедляете подсчет итераций в цикле?

#winforms #powershell #animation

#winforms #powershell #Анимация

Вопрос:

Я работаю над графическим интерфейсом PowerShell и анимирую несколько событий элемента управления. Я могу заставить его работать так, как я хочу, но я хочу, чтобы он замедлялся и был немного более продуманным.

Я понимаю, что на многих языках это связано с тактовой частотой, и это не изменится. Большинство ресурсов в Интернете связаны с ускорением работы скриптов или программ.

Чтобы привести пример того, о чем я говорю:

 $button.Add_MouseEnter({
    0..30 | %{
        $button.Location = "$_,100"
        }
    })
$button.Add_MouseLeave({
    30..0 | %{
        $button.Location = "$_,100"
        }
    })
  

Это переместит кнопку вправо на 30 единиц при наведении курсора мыши на кнопку, а когда мышь покинет кнопку, она переместится на 30 единиц влево в исходное положение.

Проблема для меня в том, что повторение 31 числа ( 0..30 ) выполняется очень быстро, и оно прерывается в анимации. Я хотел бы, чтобы это конкретное действие события выполнялось медленнее, однако проблема в том, что если бы я должен был продлить итерации, он нажимает кнопку дальше, что мне не нужно.

Прошлой ночью я лежал в постели и понял, что это может сработать, но мне было интересно, есть ли какие-либо другие способы добиться этого в PowerShell.

 0..5000 | %{
    if($_.ToString().EndsWith(00)) {
        $increment  
        $button.Location = "$increment,100"
        }
    }
  

Я попытался интегрировать его в скрипт, но это резко снизило производительность (вместо использования 5000 я использовал 50000), поэтому я прислушиваюсь к предложениям.

Спасибо!

Комментарии:

1. sleep -milliseconds 10 ?

2. Windows не может перерисовывать себя, пока вы удерживаете поток пользовательского интерфейса для своей итерации.

3. Вы можете использовать Timer .

4. @wOxxOm Это приводит к приостановке всего скрипта или просто к тому, что один поток переходит в спящий режим?

5. @PetSerAl Похоже, у него не было проблем с перемещением. Это не создание нового объекта, это просто переназначение значения свойства. Я предполагаю, что дана команда, которая заставляет ее перерисовывать при установке значения свойства.