2012-04-22 56 views
0

我想使用線程訪問一些組件。我的形式如下:使用線程訪問更多組件

enter image description here

我的消息來源是這樣的:

Private Sub btnGO_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGO.Click 
     pbAction.Value = 0 
     bgwProcess.RunWorkerAsync() 
     Me.Cursor = Cursors.WaitCursor 
    End Sub 

    Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 
     Application.Exit() 
    End Sub 

    Private Sub bgwProcess_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgwProcess.DoWork 
     'a job consists in retrieving data, populating a listview and update the progressbar 
     'start job 1.1 
     'do job 1.1 -> ProgressBar1.value+=1 
     'do job 1.2 -> ProgressBar1.value+=1 
     'do job 1.3 -> ProgressBar1.value+=1 

     'start job 2.1 ProgressBar1.value=1 
     'do job 2.1 -> ProgressBar2.value+=1 
     'do job 2.2 -> ProgressBar1.value+=1 

    End Sub 

    Private Sub bgwProcess_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bgwProcess.RunWorkerCompleted 
     Me.Cursor = Cursors.Default 
    End Sub 

任何人都可以幫我嗎?

回答

0

我創建了一個類,在_doWork填充,我將其發送到_ProgressChanged程序,在那裏我C和做任何我想該組件的形式:

Public Class myObj 
     Public action As String 
     Public msg As String 
     Public pbAction As Integer 
     Public pbMsg As Integer 
    End Class 

... 

    Private Sub btnGO_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGO.Click 
     bgwProcess.RunWorkerAsync() 
     Me.Cursor = Cursors.WaitCursor 
    End Sub 

    Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) 
     Application.Exit() 
    End Sub 

    Private Sub bgwProcess_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgwProcess.DoWork 
     Dim op As New myObj 

     op.action = "my action" 
     op.msg = "My result: Done" 
     op.pbAction = 1 
     op.pbMsg = 1 
     bgwProcess.ReportProgress(0, op) 

    End Sub 

    Private Sub bgwProcess_ProgressChanged(ByVal sender As System.Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles bgwProcess.ProgressChanged 
     Dim obj As New myObj 
     obj = DirectCast(e.UserState, myObj) 

     myListView.BeginUpdate() 
     Dim li As New ListViewItem(obj.action, 0) 
     li.SubItems.Add(obj.msg) 

     myListView.Items.AddRange(New ListViewItem() {li}) 
     myListView.EndUpdate() 
     myListView.EnsureVisible(myListView.Items.Count - 1) 
     myListView.Refresh() 

     pbAction.Value = obj.pbAction 
     pbTotal.Value = obj.pbMsg 
    End Sub 

    Private Sub bgwProcess_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bgwProcess.RunWorkerCompleted 
     Me.Cursor = Cursors.Default 
    End Sub 
+0

這是anwser到你的問題? – 2012-04-23 05:29:34

+0

這是爲我工作,但如果任何人有另一個想法,請讓我知道 – 2012-04-25 02:24:02

+0

只是標記爲答案 – 2012-04-25 02:24:47