Страница: 1 |
Страница: 1 |
Вопрос: Обновление параметра потока Thread vb.net
Добавлено: 12.07.10 13:46
Автор вопроса: Nevep
Подскажите как правильно сделать? я запускаю поток с параметрами.
Dim param1(4) As Object
param1(0) = "параметр 1"
param1(1) = "параметр 2"
param1(2) = "параметр 3"
param1(3) = "параметр 4"
nthread = New Thread(AddressOf CreateThread)
nthread.Name = "блаблабла"
nthread.Start(param1)
End Sub
Private Sub CreateThread(ByVal param As Object)
Do While True
'Тут что-то долго выполняется
msgbox(param(0))
Loop
End Sub
Через несколько минут необходимо не из этого потока изменить один из параметров. Как после запуска потока изменить параметр?
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #1
Добавлено: 13.07.10 01:41
Никак.. ты передаешь потоку параметры, и они уже являются закрытыми(private).. чтобы менять параметры, они должны быть видны ЗА пределами процедуры потока.. Поэтому, в подобных случаях,как правило, пишут класс-обертку где твои параметры являются свойствами класса.. и некий метод Run() который запускает поток.. либо можешь его стартовать в конструкторе класса(что тоже не совсем корректно).. В особых случаях, когда наступает приступ лени, можно просто Dim param1(4) As Object вынести на уровень формы и тогда меняй параметры как угодно.. но это криво.. настоящие джедаи так не делают.
Номер ответа: 2
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #2
Добавлено: 13.07.10 01:43
Разумеется, в случае с классом-оберткой, ты должен обеспечить потокобезопасность для доступа к открытым членам класса..
Номер ответа: 3
Автор ответа:
Nevep
Вопросов: 6
Ответов: 25
Профиль | | #3
Добавлено: 13.07.10 03:36
Вобщем сделал так
Номер ответа: 4
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #4
Добавлено: 13.07.10 14:57
это неверно.. ты тут усыпил UI поток.. это значит что в течении 30 сек твоя форма будет тупо висеть.. ты не сможешь ни кнопку нажать ничего другого сделать..