2010-10-12 3 views
0

Я использую потоки фона для интенсивных процессов поиска, чтобы пользовательский интерфейс был полностью доступен. После создания каждого bgw я обновляю datagridview, который показывает разные потоки и текущий статус. однако, как только они завершатся, у меня нет ни малейшего способа, или, по крайней мере, я не знаю, как обновить статус в datagridview, специфичном для каждого фонового исполнителя.background рабочий текущий статус

Try 
     bgw.RunWorkerAsync() 
     queuelist.Enqueue(bgw) 
     If Not Thread.CurrentThread.Name = "Main Thread" Then 
      Dim record As String() = {jobNum, clientProj & jobNum, jobStartTime, bgw.IsBusy.ToString} 
      DataGridView1.Rows.Add(record) 
     End If 

    Catch ex As Exception 
     MessageBox.Show("An Error Occured:" & vbNewLine & ex.Message) 
    End Try 

это устанавливает datagridviewer когда нити начинают, но как только он закончится, я не знаю, как обновить или знать, какой поток закончился. Я попытался помещать их в очередь, но я не могу определить конкретного работника, когда я перейду из очереди.

любые идеи

ответ

1

Я действительно не понимаю, почему вы хотите сделать детали реализации, как фон рабочих видимых на пользовательском интерфейсе. Ну, какой-то код. Не имеет смысла использовать очередь, потоки не заканчиваются каким-либо предсказуемым порядком. Давайте список:

Dim workerList As New List(Of BackgroundWorker) 

Вы хотите воспользоваться случае RunWorkerCompleted поднятого BGW, чтобы знать, когда работа сделана. Так что используйте AddHandler:

Dim bgw As New BackgroundWorker 
    AddHandler bgw, AddressOf DoSomeWork 
    AddHandler bgw, AddressOf WorkDone 
    workerList.Add(bgw) 
    '' Do something with the grid 
    ''... 
    bgw.RunWorkerAsync() 

И обработчик событий может выглядеть следующим образом:

Private Sub WorkDone(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs) 
    If e.Error IsNot Nothing Then Throw e.Error 
    Dim bgw = DirectCast(sender, BackgroundWorker) 
    workerList.Remove(bgw) 
    '' Do something with the grid 
End Sub 
+0

Спасибо за ответ и кстати, мне нужно, чтобы отобразить каждый процесс, протекающий на UI как текущее состояние каждого задания например: jobId jobname статус запуска – vbNewbie

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