ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 6794|ตอบกลับ: 0

[VB.NET] การใช้งาน Progress Bar ด้วย BackgroundWorker

[คัดลอกลิงก์]

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
6583



พอดีมีคำถามเข้ามาเกี่ยวกับ BackgroundWorker เข้ามา แอดมินจะสรุปสั้นๆ BackgroundWorker นั้นมันเป็นคลาส ที่ช่วยให้เราสามารถแยกคำสั่งปฏิบัติการ (Operation) ไปบนเธรด (Thread) ใหม่ได้ เอ้า!!! เดี๋ยวจะงง หากใครที่เคยใช้ ProgressBar มา คงจะสังเกตเห็นว่าเราจะไม่สามารถขยับฟอร์มไปไหนได้เลย ก็เพราะว่ามันมีงานค้างอยู่ต้องทำให้เสร็จเรียบร้อยเสียก่อน หากจะให้อธิบายเรื่อง Thread มันเป็นเรื่องยาวมาก แอดมินอยากให้ทุกๆท่านได้นำโค้ดไปลองทดสอบดู เมื่อเห็นผลลัพธ์ ก็คงจะเข้าใจได้ไม่ยาก และนำเอาผลการปฏิบัติไปช่วยอ้างอิงเพื่อตีความหมายในหลักการทางทฤษฎี ซึ่งในตัว VB.NET มันมี Control ที่ชื่อว่า BackgroundWorker มาคอยช่วยจัดการเรื่อง Thread ให้เป็นที่เรียบร้อยแล้ว UHU ...


Design Time

BackgroundWorker จะมี Events ที่สำคัญอยู่ 3 ตัว คือ
- Dowork ทำหน้าที่รันการปฏิบัติการแบบอยู่เบื้องหลัง หรือ Background Process
- ProgressChanged ทำหน้าที่รายงานความคืบหน้าของการปฏิบัติการที่ทำอยู่
- RunWorkerCompleted จะทำงานเมื่องานที่ทำอยู่นั้นเสร็จสิ้นสมบูรณ์


ทดสอบการรันแบบธรรมดา


ทดสอบการรันแบบใช้ BackgroundWorker

มาดูโค้ดกันเถอะ ...
  1. #Region "ABOUT"
  2. ' / --------------------------------------------------------------------------
  3. ' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
  4. ' / eMail : thongkorn@hotmail.com
  5. ' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
  6. ' / Facebook: https://www.facebook.com/g2gnet (For Thailand)
  7. ' / Facebook: https://www.facebook.com/commonindy (Worldwide)
  8. ' / Purpose: How to use The BackgrounderWorker.
  9. ' / Microsoft Visual Basic .NET (2010)
  10. ' /
  11. ' / This is open source code under @CopyLeft by Thongkorn/Common Tubtimkrob.
  12. ' / You can modify and/or distribute without to inform the developer.
  13. ' / --------------------------------------------------------------------------
  14. #End Region

  15. Public Class frmBackgroundWorker

  16.     Private Sub frmBackgroundWorker_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  17.         TextBox1.Text = 100
  18.         TextBox1.MaxLength = 3
  19.         '// Initialized
  20.         With BackgroundWorker1
  21.             .WorkerReportsProgress = True
  22.             .WorkerSupportsCancellation = True
  23.         End With
  24.         '//
  25.         Control.CheckForIllegalCrossThreadCalls = False
  26.     End Sub

  27.     '// Background Worker Process
  28.     Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
  29.         If Trim(TextBox1.Text) = "" Then Return
  30.         '//
  31.         BackgroundWorker1.RunWorkerAsync()
  32.     End Sub

  33.     '// BackgroundWorker - Events DoWork
  34.     Private Sub BackgroundWorker1_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
  35.         For i = 1 To 100
  36.             TextBox1.Text = i
  37.             BackgroundWorker1.ReportProgress(i)
  38.             Threading.Thread.Sleep(100)
  39.             lblProgress.Text = ProgressBar1.Value & "%"
  40.         Next
  41.     End Sub

  42.     '// When change occurs.
  43.     Private Sub BackgroundWorker1_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
  44.         Me.ProgressBar1.Value = e.ProgressPercentage
  45.     End Sub

  46.     '// When finished.
  47.     Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
  48.         MessageBox.Show("Done Complete.", "Report Status", MessageBoxButtons.OK, MessageBoxIcon.Information)
  49.     End Sub

  50.     '// Normal Process
  51.     Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
  52.         If Trim(TextBox1.Text) = "" Then Return
  53.         '//
  54.         Dim Max As Integer = 100
  55.         For i = 1 To Max
  56.             TextBox1.Text = i
  57.             lblProgress.Text = i.ToString & "%"
  58.             ProgressBar1.Value = (100 / Max) * i
  59.             Threading.Thread.Sleep(100)
  60.         Next
  61.     End Sub

  62.     ' / --------------------------------------------------------------------------
  63.     ' / Get numeric only.
  64.     Function CheckDigitOnly(ByVal index As Integer) As Boolean
  65.         Select Case index
  66.             Case 48 To 57 ' 0 - 9
  67.                 CheckDigitOnly = False
  68.             Case 8, 13 ' Backspace = 8, Enter = 13
  69.                 CheckDigitOnly = False
  70.             Case Else
  71.                 CheckDigitOnly = True
  72.         End Select
  73.     End Function

  74.     Private Sub TextBox1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
  75.         If e.KeyChar = Chr(13) Then
  76.             e.Handled = True
  77.             Call Button1_Click(sender, e)
  78.         Else
  79.             e.Handled = CheckDigitOnly(Asc(e.KeyChar))
  80.         End If
  81.     End Sub
  82. End Class
คัดลอกไปที่คลิปบอร์ด

ดาวนโหลดโค้ดฉบับเต็ม VB.NET (2010) ได้ที่นี่ ...

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

0

กระทู้

51

โพสต์

232

เครดิต

Full Member

Rank: 3Rank: 3

เครดิต
232
โพสต์ 2018-12-1 17:24:20 | ดูโพสต์ทั้งหมด

ขอบคุณครับผม
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-11-27 22:39 , Processed in 0.217072 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้