Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Обновление параметра потока Thread vb.net Добавлено: 12.07.10 13:46  

Автор вопроса:  Nevep
Подскажите как правильно сделать? я запускаю поток с параметрами.
  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        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
Вобщем сделал так
  1.  
  2. Dim param
  3. Private  Sub Form1_Load(ByVal  sender As System.Object, ByVal e As System.EventArgs) Handles  MyBase.Load
  4.         param="1"
  5.         nthread = New Thread(AddressOf CreateThread)
  6.         nthread.Name = "блаблабла"
  7.         nthread.Start()
  8.         System.Threading.Thread.Sleep(30000)
  9.         param="2"
  10.     End Sub
  11.  
  12.  Private Sub CreateThread()
  13.         myparam=param
  14.         Do While True
  15.             'Тут что-то долго выполняется
  16.             msgbox(myparam)
  17.         Loop
  18.     End Sub

Ответить

Номер ответа: 4
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #4 Добавлено: 13.07.10 14:57
System.Threading.Thread.Sleep(30000)

это неверно.. ты тут усыпил UI поток.. это значит что в течении 30 сек твоя форма будет тупо висеть.. ты не сможешь ни кнопку нажать ничего другого сделать..

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам