<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="228" Height="168" >
<StackPanel>
<Button Click="StartStop_Click" Name="btnStartStop">Start</Button>
<TextBlock Name="txtPercent"/>
<TextBlock Name="txtBiggestPrime"/>
</StackPanel>
</Window>
//File:Window.xaml.cs
using System;
using System.ComponentModel;
using System.Windows;
namespace WpfApplication1
{
public partial class Window1 : Window
{
private BackgroundWorker worker = new BackgroundWorker();
private long from = 2;
private long to = 20000;
private long biggestPrime;
public Window1() : base()
{
InitializeComponent();
worker.WorkerReportsProgress = true;
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
worker.ProgressChanged += worker_ProgressChanged;
}
private void StartStop_Click(object sender, RoutedEventArgs e)
{
worker.RunWorkerAsync();
btnStartStop.IsEnabled = false;
txtBiggestPrime.Text = string.Empty;
}
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
btnStartStop.IsEnabled = true;
txtBiggestPrime.Text = biggestPrime.ToString();
}
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
for(long current = from; current <= to; current++){
biggestPrime = current;
int percentComplete = Convert.ToInt32(((double) current / to) * 100d);
worker.ReportProgress(percentComplete);
System.Threading.Thread.Sleep(10);
}
}
private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
txtPercent.Text = e.ProgressPercentage.ToString() + "%";
}
}
}