2012-04-22 6 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, где я канд делать все, что я хочу, чтобы компонент на форме:

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

просто отметьте это как ответ –

Смежные вопросы