2012-04-22 9 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に移入されていることをクラスを作成している、と私は、私は、フォーム上のコンポーネントに私がやりたいCAND _ProgressChanged手順、に送信:

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にありますあなたの質問? –

+0

これは私のために働いていますが、誰かが別のアイデアを持っている場合は、 –

+0

を回答としてマークしてください –

関連する問題