Mega Code Archive

 
Categories / VB.Net Tutorial / WPF
 

Create a Background Worker Thread in XAML

<Window x: Class="WpfApplication1.Window1"    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    xmlns:ComponentModel="clr-namespace:System.ComponentModel;assembly=System"    Title="WPF" Height="100" Width="200">          <Window.Resources>         <ComponentModel:BackgroundWorker             x:Key="backgroundWorker"             WorkerReportsProgress="True"             WorkerSupportsCancellation="True"             DoWork="BackgroundWorker_DoWork"             RunWorkerCompleted="BackgroundWorker_RunWorkerCompleted"             ProgressChanged="BackgroundWorker_ProgressChanged"/>     </Window.Resources>          <StackPanel>         <ProgressBar Name="progressBar"/>         <Button Name="button" Click="button_Click" HorizontalAlignment="Center">Start</Button>     </StackPanel> </Window> //File:Window.xaml.vb Imports System Imports System.ComponentModel Imports System.Threading Imports System.Windows Imports System.Windows.Input Namespace WpfApplication1   Public Partial Class Window1     Inherits Window     Private ReadOnly worker As BackgroundWorker     Public Sub New()       InitializeComponent()       worker = TryCast(Me.FindResource("backgroundWorker"), BackgroundWorker)     End Sub     Private Sub button_Click(sender As Object, e As RoutedEventArgs)       If Not worker.IsBusy Then         Me.Cursor = Cursors.Wait         worker.RunWorkerAsync()         button.Content = "Cancel"       Else         worker.CancelAsync()       End If     End Sub     Private Sub BackgroundWorker_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs)       For i As Integer = 1 To 100         If worker.CancellationPending Then           Exit For         End If         Thread.Sleep(100)         worker.ReportProgress(i)       Next     End Sub     Private Sub BackgroundWorker_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs)       Me.Cursor = Cursors.Arrow       Console.WriteLine(e.[Error].Message)       button.Content = "Start"     End Sub     Private Sub BackgroundWorker_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs)       progressBar.Value = e.ProgressPercentage     End Sub   End Class End Namespace