Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > реализация потоков


Автор: noob4ever 4.6.2011, 19:01
В общем задача такая: нужно создать много потоков.

For i = 1 To X
            Dim Worker As New ProcessWorker
            Dim t As New Thread(AddressOf Worker.Start)
            t.Start()
Next

Friend Class ProcessWorker
        Friend Sub Start()
          'тут выполняется какие то действия.
          'добавление в listbox1 какого-то значения
        End Sub
End Class

А теперь вопрос, как в конце выполнения потока добавить значение в listbox1?? пробывал так Form1.listbox1.items.add(x) ничего не происходит, через делегат ошибка такая: Невозможно вызвать Invoke или BeginInvoke для элемента управления до завершения создания дескриптора окна.

Автор: krewin 4.6.2011, 21:02
Ты делаешь все не верно ты юзаешь Threading

Проще быть с элементом BackgroundWorker1 там есть процедура Workers_ProgressChanged


 
Код


       Private Sub Workers_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles Workers.ProgressChanged
        
        ListBox1.Items.Add(e.UserState)
    End Sub


юзай коду так где у нас e.UserState данные получаемые от сюда

 
Код

Private Sub Workers_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles Workers.DoWork
'тут фоновая процедура
 e.Result = рузультат фоновой процедуры
 Workers.CancelAsync()

End Sub


для запуска используй код например с кнопки


 
Код

Workers.WorkerSupportsCancellation = True
        Workers.WorkerReportsProgress = True
        Workers.RunWorkerAsync()




вот примерно так






Автор: noob4ever 7.6.2011, 13:21
дело в том, что хочу обойтись без фоновых потоков, потому что количество потоков задается пользователем, предлагаешь 100 штук BackgroundWorker вынести на форму??  это как раз умею, и это не правильно точно, поэтому ищу другой способ, как же быть?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)