<summary> This is a sample of threading. this sample have a PLAY, PAUSE, RESUME and STOP or Restart Carefull, you cant use the ThreadState to check your Thread Status because is not reliable. That is why a created a member called suspended. </summary> <remarks></remarks> Public Class Form1 Private tProgessBar As Threading.Thread Delegate Function tProgressBar_at_Max() As Boolean Private suspended As Boolean
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If tProgessBar Is Nothing Then tProgessBar = New Threading.Thread(AddressOf ProgessBarFunction)
If tProgessBar.IsAlive Then If suspended Then suspended = Not suspended tProgessBar.Resume() Button1.Text = "Playing, click to pause" Else suspended = Not suspended tProgessBar.Suspend() Button1.Text = "Paused, click to resume" End If
Else With ProgressBar1 .Style = ProgressBarStyle.Blocks .Step = 1 .Minimum = 0 .Maximum = 100 .Value = 0 End With Button1.Text = "Playing, click to pause" tProgessBar = New Threading.Thread(AddressOf ProgessBarFunction) tProgessBar.IsBackground = True tProgessBar.Start()
suspended = False End If End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Button1.Text = "Press to Start" End Sub
Private Sub ProgessBarFunction() Do Me.Invoke(New MethodInvoker(Sub() Me.ProgressBar1.PerformStep()))
Threading.Thread.Sleep(100) Loop Until ProgressBar_at_Max() Me.Invoke(New MethodInvoker(Sub() Me.Button1.Text = "finished, press to restart")) End Sub
Private Function ProgressBar_at_Max() As Boolean ProgressBar_at_Max = False If ProgressBar1.Value >= ProgressBar1.Maximum Then ProgressBar_at_Max = True Else ProgressBar_at_Max = False End If
End Function
End Class
|