WPF Working with Progress Bar in VB.NET
Progress Bar is used to show the progress of a task in applications and it is important in order to let users known about the progress of work. For eg. when you copy a file from one drive to another, you can see the progress of copy operation.
The given example demonstrates how to use Progress Bar and show progress in taskbar's icon in WPF.
Designing the user Interface in XAML
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<!-- TaskbarItemInfo is an object and needed to interect with the task bar of windows 7 -->
<Window.TaskbarItemInfo >
<TaskbarItemInfo />
</Window.TaskbarItemInfo>
<Grid>
<!--Define a Progress Bar on Main Window-->
<ProgressBar Name="ProgressBar1" Margin="0" HorizontalAlignment="Center" VerticalAlignment="Center" Width="400" Height=" 30"/>
</Grid>
</Window>
Code Behind
Imports System.ComponentModel
Class MainWindow
Dim WithEvents BackgroundWorker1 As BackgroundWorker
Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
Me.BackgroundWorker1 = New BackgroundWorker
'Enable progress reporting
BackgroundWorker1.WorkerReportsProgress = True
'Set the progress state as "normal"
TaskbarItemInfo.ProgressState = Shell.TaskbarItemProgressState.Normal
'Start the work
BackgroundWorker1.RunWorkerAsync()
'DoWork Event occurs
'Now control will goes to worker_DoWork Sub because it handles the DoWork Event
End Sub
Private Sub worker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
For i As Integer = 0 To 99 Step 10
System.Threading.Thread.Sleep(500)
'Raises the ProgressChanged event passing the value
CType(sender, System.ComponentModel.BackgroundWorker).ReportProgress(i)
'Now control will goes to worker_ProgressChanged Sub because it handles the ProgressChanged Event
Next i
End Sub
Private Sub worker_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
'Increment the value on progress bars in window
ProgressBar1.Value = e.ProgressPercentage
'Increment the value on progress bars in Taskbar
TaskbarItemInfo.ProgressValue = CDbl(e.ProgressPercentage) / 100
End Sub
' Work completed
Private Sub worker_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
ProgressBar1.Value = 100
TaskbarItemInfo.ProgressValue = 1.0
'Set the progress state as "indeterminate"
TaskbarItemInfo.ProgressState = Shell.TaskbarItemProgressState.Indeterminate
'display a message box and keep the result in variable result
Dim result = MessageBox.Show("The progress completed. Would you like to exit now?", "Message - Progress Completed", MessageBoxButton.YesNo)
'if result is Yes - Close the application
If result = MessageBoxResult.Yes Then End
End Sub
End Class
Output :
When you will run the application, the following window will open and you will the progress in the progress bar.
Also the progress can be seen in the task bar icon
After the completion of the progress, you'll receive a message box as shown in below figure
You can quit the application by pressing button - Yes.
---------------------------------------------------------------------------------------------
Nothing rubbish here, each article is valuable for needy