Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Applications may want to performs actions with certain timing, or tick intervals. One example is a turn-based game like a card game where each computer player takes some time to play a turn. An example which will be shown below is a slideshow application where photos are changed at 2 seconds intervals. These are the controls used:
1. CheckBox - to toggle slideshow on/off
2. TextBox - to display the file name
3. Image - to display the image
4. ProgressBar - to display progress
For this sample slideshow application, drag and drop some images from your Sample Pictures folder to your project. I used Koala.jpg, Jellyfish.jpg and Penguins.jpg.
This is the xaml:
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<CheckBox Content="Slideshow Mode" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked" IsChecked="True" />
<Grid x:Name="TitlePanel" Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock VerticalAlignment="Center" Text="File name: " />
<TextBox Grid.Column="1" x:Name="textBox1" />
</Grid>
<Grid x:Name="ContentGrid" Grid.Row="2">
<Image x:Name="Image1" />
</Grid>
<ProgressBar x:Name="ProgressBar1" Grid.Row="3" />
</Grid>
And this is the code:
public partial class MainPage : PhoneApplicationPage
{
DispatcherTimer timer = new DispatcherTimer();
List<string> files = new List<string>() { "Koala.jpg", "Jellyfish.jpg", "Penguins.jpg" };
List<BitmapImage> images = new List<BitmapImage>();
int current = 0;
// Constructor
public MainPage()
{
InitializeComponent();
ProgressBar1.Maximum = files.Count;
foreach (string file in files)
{
BitmapImage image = new BitmapImage(new Uri(file, UriKind.Relative));
images.Add(image);
}
timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(2);
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}
void timer_Tick(object sender, EventArgs e)
{
Image1.Source = images[current];
textBox1.Text = files[current];
ProgressBar1.Value = current;
current++;
if (current >= files.Count)
current = 0;
}
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
timer.Start();
}
private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
{
timer.Stop();
}
}
Comments
Anonymous
August 02, 2012
Make sure you add a using reference to System.Windows.ThreadingAnonymous
December 26, 2013
I try intruduce timer.tick and give me a error, why?Anonymous
February 16, 2014
Add: using System.Windows.Threading; using System.Windows.Media.Imaging;