Страница: 1 |
Страница: 1 |
Вопрос: Многопоточность
Добавлено: 17.03.08 19:25
Автор вопроса: RedRum
уже весь форум перерыл но так и не разобрался..
задача: есть некая программа которая должна в фоновом режиме делать некое действие долгое ( считывает из файла текст), проблема в том что в 1 поток, пока этот процесс не завершится программа виснет.. нужно сделать так чтоб текст грузился независимо от основного окна (фоново) но как этот Thread юзать я так и не понял
вот к примеру
Dim trd = New Threading.Thread(AddressOf a)
на что мне говортися что "а" у меня not declared.. КАК я должен был написать правильно?
все что мне нужно это 2й поток для загрузки текста в фоне
если можно приведите полный пример использывания самих потоков. что то тип. код проги эт тот код который я в своей программе напишу
Public Class Form1
тут работа с потоками
--- код проги--
end class
4 день уже ищу как с ними работать нифига не нашел понятного для себя.. памагите плз!
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
Wolf4D
Вопросов: 20
Ответов: 131
Web-сайт:
Профиль | | #1
Добавлено: 17.03.08 23:22
Эммм... DoEvents может помoчь
Номер ответа: 2
Автор ответа:
s12
Вопросов: 24
Ответов: 363
Профиль | | #2
Добавлено: 18.03.08 01:33
Вот пример как запустить процедуру из самодельного класса в отдельном потоке.
Inherits System.Windows.Forms.Form
Public Sub SubtractFromCounter()
Dim i As Decimal
For i = 0 To 4000000
'.....
Next
MsgBox("Поток завершен."
End Sub
End Class
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim mt As New WillUseThreads()
Dim bts As New ThreadStart(AddressOf mt.SubtractFromCounter)
Dim bt As New Thread(bts)
bt.Start()
End Sub
Вроде бы так.
В твоем случае проще юзать DoEvents (Wolf4D верно говорит.).
Номер ответа: 3
Автор ответа:
RedRum
Вопросов: 3
Ответов: 5
Профиль | | #3
Добавлено: 18.03.08 18:34
о, спс, попробую применить. нашел еще контрол BackgroundWorker, работает на вид точно так же как и эти трейды, ток с ним обращаться проще, хотя такие же ограницения, допустип циклы и вычисления внутри выполняются, а например менять значение прогресс бара напрямую не может... ток через внешнюю общюю переменную ( я для этих целей таймер обновления знчения прогресбара заюзал, бред конечно, но работает + в моем случае таймер еще пригодится )
Номер ответа: 4
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #4
Добавлено: 20.03.08 16:50
С потоками работать очень легко, ничего сложного здесь не вижу
DoEvents в дотнете применять не советую.
BackgroundWorker неплохой вариант, но по сути та же надстройка над потоком.
Чтоб изменить значение родительской формы, общая переменная не нужно - получить доступ к форме из другого пока можно через ControlInvoke.