Show a Continuous Animation During an Asynchronous Process
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="WPF" Height="220" Width="180">
<Window.Resources>
<Storyboard x:Key="PulseStoryboard" AutoReverse="True" >
<ColorAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="ellipse" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[0].(GradientStop.Color)">
<SplineColorKeyFrame KeyTime="00:00:00.5000000" Value="Lime"/>
</ColorAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="ellipse" Storyboard.TargetProperty="(Shape.Fill).(GradientBrush.GradientStops)[1].(GradientStop.Color)">
<SplineColorKeyFrame KeyTime="00:00:00.5000000" Value="Green"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</Window.Resources>
<Grid x:Name="LayoutRoot" >
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="60" />
</Grid.RowDefinitions>
<Ellipse Width="100" Height="100" Margin="10" Stroke="{x:Null}" x:Name="ellipse">
<Ellipse.Fill>
<RadialGradientBrush GradientOrigin="0.25,0.25">
<GradientStop Offset="0" Color="Red"/>
<GradientStop Offset="1" Color="Blue"/>
</RadialGradientBrush>
</Ellipse.Fill>
</Ellipse>
<Button Margin="10" Content="Start" Grid.Row="1" x:Name="button" Click="button_Click"/>
</Grid>
</Window>
//File:Window.xaml.vb
Imports System.Windows
Imports System.Threading
Imports System.ComponentModel
Imports System.Windows.Media.Animation
Namespace WpfApplication1
Public Partial Class Window1
Inherits Window
Private pulseStoryboard As Storyboard
Private worker As BackgroundWorker
Public Sub New()
InitializeComponent()
pulseStoryboard = DirectCast(Me.Resources("PulseStoryboard"), Storyboard)
pulseStoryboard.RepeatBehavior = RepeatBehavior.Forever
worker = New BackgroundWorker()
AddHandler worker.DoWork, New DoWorkEventHandler(AddressOf worker_DoWork)
AddHandler worker.RunWorkerCompleted, New RunWorkerCompletedEventHandler(AddressOf worker_RunWorkerCompleted)
End Sub
Private Sub button_Click(sender As Object, e As RoutedEventArgs)
pulseStoryboard.Begin(Me, True)
worker.RunWorkerAsync()
button.IsEnabled = False
End Sub
Private Sub worker_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs)
button.IsEnabled = True
pulseStoryboard.[Stop](Me)
End Sub
Private Sub worker_DoWork(sender As Object, e As DoWorkEventArgs)
For i As Integer = 1 To 50
Thread.Sleep(100)
Next
End Sub
End Class
End Namespace
Related examples in the same category