Mega Code Archive

 
Categories / VB.Net Tutorial / WPF
 

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