Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 |

 

  Вопрос: как дождаться окончания потока? Добавлено: 18.06.08 21:46  

Автор вопроса:  __Pavel__ | Web-сайт: ммм.сайта.НЕТ
есть поток:

        Dim thr As New Thread(AddressOf GenKey)
        thr.Start(_Parameters)
        ...
        MsgBox("Поток закончен")


как сделать так чтоб программа не продолжила работу дальше? т.е. как сделать так чтоб сообщение показалось после завершения потока, а не после его начала?

Ответить

  Ответы Всего ответов: 16  

Номер ответа: 1
Автор ответа:
 Holsten



Вопросов: 5
Ответов: 100
 Профиль | | #1 Добавлено: 18.06.08 22:18
WaitForSingleObject

Ответить

Номер ответа: 2
Автор ответа:
 ника



Вопросов: 1
Ответов: 111


 Профиль | | #2 Добавлено: 19.06.08 09:31
как сделать так чтоб программа не продолжила работу дальше?

Отказаться от использования потока! :-)))

Ты противоречишь основной сути потока! Его используют в тех случаях, когда необходимо выполнить какую то работу ассинхронно.. т.е. независимо от действий основного потока. Если же ты хочешь узнать момент окончания работы потока, то просто реализуй какое то событие внутри потока и подпишись на него там, где это нужно и выполняй какие то действия по этому событию..

Ответить

Номер ответа: 3
Автор ответа:
 Виталик



Вопросов: 4
Ответов: 4
 Профиль | | #3 Добавлено: 19.06.08 12:10
схематично:

-Создаешь Thread A.

Код TreadA:
[создать Thread B]
WaitForSingleObject(ThreadB.id)
Msgbox("Поток закончен";)

Ответить

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



Вопросов: 29
Ответов: 284
 Web-сайт: ммм.сайта.НЕТ
 Профиль | | #4
Добавлено: 19.06.08 15:45
Ты противоречишь основной сути потока! Его используют в тех случаях, когда необходимо выполнить какую то работу ассинхронно.. т.е. независимо от действий основного потока. Если же ты хочешь узнать момент окончания работы потока, то просто реализуй какое то событие внутри потока и подпишись на него там, где это нужно и выполняй какие то действия по этому событию..


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

еще вопрос есть ли какойнибудь способ по проще, чем передавать данные из потока в контрол на форме с помощью делегатов?

Ответить

Номер ответа: 5
Автор ответа:
 fluke



ICQ: 318170731 

Вопросов: 15
Ответов: 96
 Профиль | | #5 Добавлено: 19.06.08 16:03
Используй BackgroundWorker там уже есть реализация событий, в частности ProgressChanged. передать данные контролу формы, тобишь обратиться к нему, можно только в том потоке в котором он создан. Поэтому без делегатов не обойтись

Ответить

Номер ответа: 6
Автор ответа:
 ника



Вопросов: 1
Ответов: 111


 Профиль | | #6 Добавлено: 19.06.08 20:58
еще вопрос есть ли какойнибудь способ по проще, чем передавать данные из потока в контрол на форме с помощью делегатов?

Способ есть... Можно отключить проверку на Cross-Thread, но это криво.. В 90% случаях это отработает без ошибок, а в остальных получишь дедлок. Так что делегаты - это вполне нормальное решение.
Еще, как вариант, можно заюзать AsyncOperation но там по сути тоже самое...

а после его нужно выполнить еще одно действие, именно после

Ну и в чем проблема? Создай событие, и в конце работы потока инициируй его. Далее в форме подпишись на него, и как это событие сработает делай что тебе нужно со своей программой все, что угодно..

Ответить

Номер ответа: 7
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #7 Добавлено: 21.06.08 16:23
> просто реализуй какое то событие внутри потока и подпишись на него там, где это нужно и выполняй какие то действия по этому событию..

Это событие будет отрабатывать в том же потоке который его и вызвал.

Ответить

Номер ответа: 8
Автор ответа:
 ника



Вопросов: 1
Ответов: 111


 Профиль | | #8 Добавлено: 21.06.08 17:02
Это событие будет отрабатывать в том же потоке который его и вызвал.


Ну и что с того? А подписаться на него ты можешь в каком угодно месте и в каком угодно потоке..

Ответить

Номер ответа: 9
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #9 Добавлено: 21.06.08 22:14
Ну я так понимаю автор вопроса хочет словить завершение потока из другого потока

Ответить

Номер ответа: 10
Автор ответа:
 ника



Вопросов: 1
Ответов: 111


 Профиль | | #10 Добавлено: 22.06.08 19:55
хочет словить завершение потока из другого потока

хм... перечитала топик... И с чего ты это взял?

Ответить

Номер ответа: 11
Автор ответа:
 Holsten



Вопросов: 5
Ответов: 100
 Профиль | | #11 Добавлено: 22.06.08 20:16
По-моему, совершенно ясно, что автор хочет заморозить выполнение основного потока до момента завершения вторичного. Жаль что объект Thread в .NET не имеет открытого хендла. Было бы проще.

Ответить

Номер ответа: 12
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #12 Добавлено: 01.07.08 19:40
чем проще? Через ManualResetEvent все элементарно делается, вопрос в том ЗАЧЕМ?

Ответить

Номер ответа: 13
Автор ответа:
 __Pavel__



Вопросов: 29
Ответов: 284
 Web-сайт: ммм.сайта.НЕТ
 Профиль | | #13
Добавлено: 06.07.08 00:22
сделал по другому... тема закрыта!

Ответить

Номер ответа: 14
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #14 Добавлено: 06.07.08 02:12
Расскажи как сделал?

Ответить

Номер ответа: 15
Автор ответа:
 __Pavel__



Вопросов: 29
Ответов: 284
 Web-сайт: ммм.сайта.НЕТ
 Профиль | | #15
Добавлено: 06.07.08 13:48
этот поток генерировал ключ... при загрузке формы нужно было сгенерировать ключ а потом применить его... я сделал проще я сразу через код его вписал... типа стандартный =)

Ответить

Страница: 1 | 2 |

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



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