DispatcherTimer не является элементом управления, однако мы можем его использовать для процессов в графическом приложении, которые должны выполняться с определенной периодичностью. Наиболее важные свойства и методы таймера:
Свойство Enabled при значении true указывает, что таймер будет запускаться вместе с формой
Свойство Interval устанавливает интервал таймера в виде объекта TimeSpan
Метод Start() запускает таймер
Метод Stop() останавливает таймер
Событие Tick срабатывает по истечении интервала из свойства Interval
Далее на примере индикатора процесса рассмотри использование таймера
ProgressBar представляет индикатор выполнения какого-либо процесса. Например, зададим следующий ProgressBar:
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> <ProgressBar x:Name="progressBar" Maximum="100" Width="300" Height="30" ValueChanged="progressBar_ValueChanged" /> <TextBlock x:Name="textBlock1" /> </StackPanel>
Свойство Maximum
указывает на максимально возможное значение индикатора. При изменении значения генерируется событие ValueChanged.
Определим в файле кода для него обработчик:
using System; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; namespace ControlsApp { public sealed partial class MainPage : Page { DispatcherTimer timer; public MainPage() { this.InitializeComponent(); timer = new DispatcherTimer() { Interval = new TimeSpan(0,0,1) }; // 1 секунда timer.Tick += Timer_Tick; timer.Start(); } private void Timer_Tick(object sender, object e) { progressBar.Value++; if (progressBar.Value == 100) timer.Stop(); } private void progressBar_ValueChanged(object sender, RangeBaseValueChangedEventArgs e) { textBlock1.Text = progressBar.Value.ToString(); } } }
В данном случае при запуске приложения будет запускаться таймер, который будет срабатывать раз в секунду. В обработчике таймера происходит приращение
значения индикатора: progressBar.Value++
В ответ на изменение значения индикатора генерируется событие ValueChanged и срабатывает его обработчик, который изменяет текст в текстовом блоке.
ProgressRing представляет кольцо с анимацией, которое отображается во время некоторого длительного процесса:
<ProgressRing x:Name="progressRing" IsActive="True" Width="60" Height="60" />
Если свойство IsActive
равно true
, значит кольцо будет отображаться. При завершении процесса мы можем программно отключить отображение, задав
этому свойству значение false