گاهی در برنامه نیاز داریم که یک پردازش را در وسط انجام کار متوقف(Pause) کنیم و بعدا ادامه آن را اجرا کنیم.
مثلا:
- · در آنتی ویروس ها
- · برنامه های فشرده سازی فایل
- · برنامه کپی فایل
- · نرم افزار Image گرفتن از Cd و Dvd
- · نرم افزارهای مبدل(هر نوع فایل به نوع دیگر)
و بطور کلی خیلی از کارها زمانبر هستند و همچنین پردازشگر را به شدت مشغول می کنند.در این موارد بهتر است که امکان توقف موقت پردازش را برای کاربر فراهم کنیم.
حال نحوه کار را با ذکر یک مثال شرح می دهیم:
لوازم مورد نیاز:
- · متد suspend(برای توقف Thread)
- · متد Resume (برای ادامه اجرای یک Thread متوقف شده)
- · خاصیت Threadstate(برای تشخیص وضعیت Thread مورد نظر)
برنامه مورد نظر: برنامه تولید اطلاعات متنی و ذخیره در فایل با قابلیت Pause و Resume
تصویری از محیط برنامه:

سورس برنامه:(سورس کامل برنامه ضمیمه شده است.)
Public Class Form1
Dim t As Threading.Thread
Private Sub Btnstart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnstart.Click
Control.CheckForIllegalCrossThreadCalls = False
t = New Threading.Thread(AddressOf Create_big_file)
t.IsBackground = True
t.Start(txtfilename.Text.Trim)
btnstart.Enabled = False
btnpause.Enabled = True
btnabort.Enabled = True
End Sub
Private Sub Create_big_file(ByVal FileName As String)
Dim fs As New IO.StreamWriter(FileName)
Dim i As Decimal
While True
fs.WriteLine("www.Barnamenevis.org " + "Line: " + i.ToString)
fs.Flush() 'save this line
lblstatus.Text = "Line: " + i.ToString
i += 1
End While
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim cdl As New SaveFileDialog
cdl.Filter = "Text Files|*.txt"
If cdl.ShowDialog = Windows.Forms.DialogResult.OK Then
txtfilename.Text = cdl.FileName
End If
End Sub
Private Sub btnpause_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnpause.Click
t.Suspend()
btnpause.Enabled = False
btnresume.Enabled = True
End Sub
Private Sub btnresume_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnresume.Click
t.Resume()
btnresume.Enabled = False
btnpause.Enabled = True
End Sub
Private Sub btnabort_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnabort.Click
If t.ThreadState = Threading.ThreadState.Background + Threading.ThreadState.Suspended Then
MsgBox("هنگامی که یک نخ در حالت توقف است نمی توان آن را نابود کرد", MsgBoxStyle.Exclamation)
ElseIf t.ThreadState = Threading.ThreadState.Background + Threading.ThreadState.Running Then
t.Abort()
MsgBox("Thread Aborted By User!", MsgBoxStyle.Critical) : End
End If
End Sub
End Class
مزایای تولید این برنامه با Thread در مقایسه با مدل بدون Thread:
- · قابلیت Pause و Resume برنامه توسط کاربر
- · قفل نشدن فرم برنامه هنگام پردازش
- · سرعت بالاتر نسبت به حالت تک نخی
- درس بعدی: همزمان سازی Thread ها