Imports System.ComponentModel
Imports System.Threading
Imports System.ComponentModel
Imports System.Threading
Friend Class ProgressForm2
Inherits Form
' Methods
Public Sub New()
Me.InitializeComponent()
End Sub
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
Me.progressBar1.Minimum = 0
Me.progressBar1.Maximum = &H3E8
AddHandler Me.worker.DoWork, New DoWorkEventHandler(AddressOf Me.worker_DoWork)
Me.worker.WorkerReportsProgress = True
AddHandler Me.worker.RunWorkerCompleted, New RunWorkerCompletedEventHandler(AddressOf Me.worker_RunWorkerCompleted)
AddHandler Me.worker.ProgressChanged, New ProgressChangedEventHandler(AddressOf Me.worker_ProgressChanged)
Me.worker.RunWorkerAsync()
End Sub
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
If (disposing AndAlso (Not Me.components Is Nothing)) Then
Me.components.Dispose()
End If
MyBase.Dispose(disposing)
End Sub
Private Sub InitializeComponent()
Me.button1 = New Button
Me.progressBar1 = New ProgressBar
MyBase.SuspendLayout()
Me.button1.Location = New Point(&H5C, &H63)
Me.button1.Name = "button1"
Me.button1.Size = New Size(&H4B, &H17)
Me.button1.TabIndex = 0
Me.button1.Text = "Process"
Me.button1.UseVisualStyleBackColor = True
AddHandler Me.button1.Click, New EventHandler(AddressOf Me.button1_Click)
Me.progressBar1.Location = New Point(30, &H2F)
Me.progressBar1.Name = "progressBar1"
Me.progressBar1.Size = New Size(&HDF, &H17)
Me.progressBar1.TabIndex = 1
MyBase.AutoScaleDimensions = New SizeF(6.0!, 13.0!)
MyBase.AutoScaleMode = AutoScaleMode.Font
MyBase.ClientSize = New Size(&H124, &H111)
MyBase.Controls.Add(Me.progressBar1)
MyBase.Controls.Add(Me.button1)
MyBase.Name = "ProgressForm"
Me.Text = "ProgressForm"
AddHandler MyBase.Load, New EventHandler(AddressOf Me.ProgressForm_Load)
MyBase.ResumeLayout(False)
End Sub
Private Sub PerformStep()
If MyBase.InvokeRequired Then
MyBase.Invoke(New Action(AddressOf Me.PerformStep))
Else
Me.progressBar1.PerformStep()
End If
End Sub
Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
Return MyBase.ProcessCmdKey((msg), keyData)
End Function
Private Sub ProgressForm_Load(ByVal sender As Object, ByVal e As EventArgs)
Me.progressBar1.Style = ProgressBarStyle.Continuous
Me.progressBar1.Step = 1
Me.button1_Click(Me, New EventArgs)
End Sub
Public Sub ShowProgress()
Me.button1_Click(Me, New EventArgs)
End Sub
Private Sub worker_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)
Dim ordersCount As Integer = &H3E8 ' decimal 10000
Dim i As Integer
For i = 0 To ordersCount - 1
Me.worker.ReportProgress(i) ' update the UI for the user.
'PerformStep() ' alternate means to update UI that uses Control.InvokeRequired
Thread.Sleep(5) ' simulate a time consuming task.
Next i
e.Result = "File Transfer Completed"
End Sub
Private Sub worker_ProgressChanged(ByVal sender As Object, ByVal e As ProgressChangedEventArgs)
Me.progressBar1.PerformStep()
End Sub
Private Sub worker_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs)
If (Not e.Error Is Nothing) Then
MessageBox.Show(e.Error.Message, "File Transfer Failed", MessageBoxButtons.RetryCancel)
Else
Dim s As String = CType(e.Result, String)
MessageBox.Show(s, "File Transfer Completed", MessageBoxButtons.OK)
End If
MyBase.Close()
End Sub
' Fields
Private button1 As Button
Private components As IContainer
Private progressBar1 As ProgressBar
Private worker As BackgroundWorker = New BackgroundWorker
' Nested Types
Public Delegate Sub Action()
End Class