VB.Net Tutorial/GUI/BackgroundWorker

Материал из VB Эксперт
Версия от 15:56, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Background worker

<source lang="vbnet">Imports System.Windows.Forms

public class BackgroundWorker

  public Shared Sub Main
       Application.Run(New Form1)
  End Sub

End class Public Class Form1

   " Display the current time.
   Private Sub tmrUpdateClock_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrUpdateClock.Tick
       lblTime.Text = Now.ToString("T")
   End Sub
   " Start the asynchronous calculation.
   Private Sub btnGo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGo.Click
       btnGo.Enabled = False
       lblWorking.Text = "Working..."
       Me.Cursor = Cursors.WaitCursor
       Application.DoEvents()
       bgwLongCalculation.RunWorkerAsync(5)
   End Sub
   Private Sub bgwLongCalculation_DoWork(ByVal sender As Object, ByVal e As System.ruponentModel.DoWorkEventArgs) Handles bgwLongCalculation.DoWork
       For i As Integer = 0 To 100000
           For j As Integer = 0 To 100000
               For k As Integer = 0 To 100000
       
               Next k
           Next j
       Next i
   End Sub
   " The long task is done.
   Private Sub bgwLongCalculation_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ruponentModel.RunWorkerCompletedEventArgs) Handles bgwLongCalculation.RunWorkerCompleted
       btnGo.Enabled = True
       lblWorking.Text = "Done..."
       Me.Cursor = Cursors.Default
   End Sub

End Class <Global.Microsoft.VisualBasic.rupilerServices.DesignerGenerated()> _ Partial Public Class Form1

   Inherits System.Windows.Forms.Form
   "Form overrides dispose to clean up the component list.
   <System.Diagnostics.DebuggerNonUserCode()> _
   Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
       If disposing AndAlso components IsNot Nothing Then
           components.Dispose()
       End If
       MyBase.Dispose(disposing)
   End Sub
   "Required by the Windows Form Designer
   Private components As System.ruponentModel.IContainer
   "NOTE: The following procedure is required by the Windows Form Designer
   "It can be modified using the Windows Form Designer.  
   "Do not modify it using the code editor.
   <System.Diagnostics.DebuggerStepThrough()> _
   Private Sub InitializeComponent()
       Me.ruponents = New System.ruponentModel.Container
       Me.btnGo = New System.Windows.Forms.Button
       Me.lblTime = New System.Windows.Forms.Label
       Me.tmrUpdateClock = New System.Windows.Forms.Timer(Me.ruponents)
       Me.bgwLongCalculation = New System.ruponentModel.BackgroundWorker
       Me.lblWorking = New System.Windows.Forms.Label
       Me.SuspendLayout()
       "
       "btnGo
       "
       Me.btnGo.Location = New System.Drawing.Point(8, 8)
       Me.btnGo.Name = "btnGo"
       Me.btnGo.Size = New System.Drawing.Size(48, 23)
       Me.btnGo.TabIndex = 0
       Me.btnGo.Text = "Go"
       "
       "lblTime
       "
       Me.lblTime.AutoSize = True
       Me.lblTime.Location = New System.Drawing.Point(232, 8)
       Me.lblTime.Name = "lblTime"
       Me.lblTime.Size = New System.Drawing.Size(36, 13)
       Me.lblTime.TabIndex = 1
       Me.lblTime.Text = "lblTime"
       "
       "tmrUpdateClock
       "
       Me.tmrUpdateClock.Enabled = True
       Me.tmrUpdateClock.Interval = 250
       "
       "bgwLongCalculation
       "
       "
       "lblWorking
       "
       Me.lblWorking.Location = New System.Drawing.Point(80, 8)
       Me.lblWorking.Name = "lblWorking"
       Me.lblWorking.Size = New System.Drawing.Size(112, 24)
       Me.lblWorking.TabIndex = 2
       Me.lblWorking.TextAlign = System.Drawing.ContentAlignment.MiddleLeft
       "
       "Form1
       "
       Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
       Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
       Me.ClientSize = New System.Drawing.Size(292, 80)
       Me.Controls.Add(Me.lblWorking)
       Me.Controls.Add(Me.lblTime)
       Me.Controls.Add(Me.btnGo)
       Me.Name = "Form1"
       Me.Text = "UseBackgroundWorker"
       Me.ResumeLayout(False)
       Me.PerformLayout()
   End Sub
   Friend WithEvents btnGo As System.Windows.Forms.Button
   Friend WithEvents lblTime As System.Windows.Forms.Label
   Friend WithEvents tmrUpdateClock As System.Windows.Forms.Timer
   Friend WithEvents bgwLongCalculation As System.ruponentModel.BackgroundWorker
   Friend WithEvents lblWorking As System.Windows.Forms.Label

End Class</source>

Long process and GUI

<source lang="vbnet">"Visual Basic 2005 Programmer"s Reference "by Rod Stephens (Author) "# Publisher: Wrox (October 21, 2005) "# Language: English "# ISBN-10: 0764571982 "# ISBN-13: 978-0764571985 Imports System.Windows.Forms

public class BackgroundWorkder

  public Shared Sub Main
       Application.Run(New Form1)
  End Sub

End class Public Class Form1

   " Start the long process.
   Private Sub btnStartProcess_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles btnStartProcess.Click
       " Get ready.
       btnStartProcess.Enabled = False
       btnCancel.Enabled = True
       prgLongProcess.Value = 0
       " Start the worker.
       bgrLongProcess.WorkerReportsProgress = True
       bgrLongProcess.WorkerSupportsCancellation = True
       bgrLongProcess.RunWorkerAsync()
   End Sub
   " Cancel the long process.
   Private Sub btnCancel_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles btnCancel.Click
       bgrLongProcess.CancelAsync()
   End Sub
   " Display the progress.
   Private Sub bgrLongProcess_ProgressChanged(ByVal sender As Object, _
    ByVal e As System.ruponentModel.ProgressChangedEventArgs) _
    Handles bgrLongProcess.ProgressChanged
       prgLongProcess.Value = e.ProgressPercentage
   End Sub
   " The worker is done.
   Private Sub bgrLongProcess_RunWorkerCompleted(ByVal sender As Object, _
    ByVal e As System.ruponentModel.RunWorkerCompletedEventArgs) _
    Handles bgrLongProcess.RunWorkerCompleted
       btnStartProcess.Enabled = True
       btnCancel.Enabled = False
   End Sub
   " Do the work.
   Private Sub bgrLongProcess_DoWork(ByVal sender As Object, _
    ByVal e As System.ruponentModel.DoWorkEventArgs) Handles bgrLongProcess.DoWork
       " This example just wastes some time.
       Const NUM_SECONDS As Integer = 5
       For i As Integer = 1 To NUM_SECONDS
           " Pause 1 second.
           Dim wait_until As Date = Now.AddSeconds(1)
           Do While Now < wait_until
           Loop
           " If the user has canceled, stop.
           If bgrLongProcess.CancellationPending Then Exit Sub
           " Report our progress.
           bgrLongProcess.ReportProgress(CInt(100 * i / NUM_SECONDS))
       Next i
   End Sub

End Class <Global.Microsoft.VisualBasic.rupilerServices.DesignerGenerated()> _ Partial Public Class Form1

   Inherits System.Windows.Forms.Form
   "Form overrides dispose to clean up the component list.
   <System.Diagnostics.DebuggerNonUserCode()> _
   Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
       If disposing AndAlso components IsNot Nothing Then
           components.Dispose()
       End If
       MyBase.Dispose(disposing)
   End Sub
   "Required by the Windows Form Designer
   Private components As System.ruponentModel.IContainer
   "NOTE: The following procedure is required by the Windows Form Designer
   "It can be modified using the Windows Form Designer.  
   "Do not modify it using the code editor.
   <System.Diagnostics.DebuggerStepThrough()> _
   Private Sub InitializeComponent()
       Me.btnStartProcess = New System.Windows.Forms.Button
       Me.btnCancel = New System.Windows.Forms.Button
       Me.prgLongProcess = New System.Windows.Forms.ProgressBar
       Me.bgrLongProcess = New System.ruponentModel.BackgroundWorker
       Me.SuspendLayout()
       "
       "btnStartProcess
       "
       Me.btnStartProcess.Location = New System.Drawing.Point(8, 8)
       Me.btnStartProcess.Name = "btnStartProcess"
       Me.btnStartProcess.Size = New System.Drawing.Size(75, 23)
       Me.btnStartProcess.TabIndex = 0
       Me.btnStartProcess.Text = "Start"
       "
       "btnCancel
       "
       Me.btnCancel.Location = New System.Drawing.Point(208, 8)
       Me.btnCancel.Name = "btnCancel"
       Me.btnCancel.Size = New System.Drawing.Size(72, 24)
       Me.btnCancel.TabIndex = 1
       Me.btnCancel.Text = "Cancel"
       "
       "prgLongProcess
       "
       Me.prgLongProcess.BackColor = System.Drawing.Color.Black
       Me.prgLongProcess.ForeColor = System.Drawing.Color.Red
       Me.prgLongProcess.Location = New System.Drawing.Point(8, 48)
       Me.prgLongProcess.Name = "prgLongProcess"
       Me.prgLongProcess.Size = New System.Drawing.Size(272, 16)
       Me.prgLongProcess.TabIndex = 2
       "
       "Form1
       "
       Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
       Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
       Me.ClientSize = New System.Drawing.Size(288, 75)
       Me.Controls.Add(Me.prgLongProcess)
       Me.Controls.Add(Me.btnCancel)
       Me.Controls.Add(Me.btnStartProcess)
       Me.Name = "Form1"
       Me.Text = "UseBackgroundWorker"
       Me.ResumeLayout(False)
   End Sub
   Friend WithEvents btnStartProcess As System.Windows.Forms.Button
   Friend WithEvents btnCancel As System.Windows.Forms.Button
   Friend WithEvents prgLongProcess As System.Windows.Forms.ProgressBar
   Friend WithEvents bgrLongProcess As System.ruponentModel.BackgroundWorker

End Class</source>