Execute a Method Asynchronously Using the Dispatcher Queue

<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" Width="220" Height="104" >
<StackPanel Orientation="Vertical">
<Button Click="StartStop_Click" Name="btnStartStop">Start</Button>
<StackPanel Orientation="Horizontal">
<TextBlock>Biggest Prime Found:</TextBlock>
<TextBlock Name="txtNumber"/>
</StackPanel>
</StackPanel>
</Window>
//File:Window.xaml.cs
using System;
using System.Windows;
using System.Windows.Threading;
namespace WpfApplication1
{
public partial class Window1 : Window
{
private bool continueCalculating = false;
public Window1() : base()
{
InitializeComponent();
}
private void StartStop_Click(object sender, RoutedEventArgs e)
{
if(continueCalculating)
{
continueCalculating = false;
btnStartStop.Content = "Start";
}
else
{
continueCalculating = true;
btnStartStop.Content = "Stop";
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal,new Action<int>(UpdateNumber), 3);
}
}
public void UpdateNumber(int current)
{
txtNumber.Text = current.ToString();
if(continueCalculating)
{
this.Dispatcher.BeginInvoke(DispatcherPriority.SystemIdle,new Action<int>(UpdateNumber), current + 2);
}
}
}
}
Related examples in the same category