Не делайте этого в winforms.Поддержка графического ускорения или оптимизации очень ограничена.
Попробуйте wpf
или uwp
, у него много функций, касающихся таких анимаций, которые поддерживаются "из коробки".
См. Microsoft docs
Вы также можете пойти на решение DirectX
, но это будет еще большим излишним.
Обратите внимание, что эти платформы обычно используют MVVM
шаблон, в котором у вас есть Page
с кодом позади, ViewModel
в качестве источника данных и View
, состоящий из XAML
.
Это немного сложнеесправиться с чем-то более старым WinForms
, но если вы учитесь и действительно хотите создавать красивые приложения, это определенно верный путь.
Анимация WPF поставляется с большим количеством базовых / вспомогательных классов,как видно здесь
Вот пример, чистый XAML
:
<!-- just a container -->
<Canvas Background="Orange">
<-- a canvas to apply the animation on -->
<Canvas x:Name="target" Background="Green">
<!-- your rectangle -->
<Rectangle Width="200" Height="100" Fill="Blue" Stroke="Black" StrokeThickness="4"/>
<!-- the animation trigger -->
<Canvas.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard>
<Storyboard RepeatBehavior="Forever" AutoReverse="True">
<DoubleAnimation Storyboard.TargetName="target"
Storyboard.TargetProperty="Left"
From="0" To="100"
Duration="0:0:3"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Canvas.Triggers>
</Canvas>
</Canvas>