![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Mutronics |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 17.6.2007 Репутация: нет Всего: нет |
Вобщем на форме есть TabControl и при каждом нажатии открывается новая страница с выполнением следующего кода:
Проблема в том, если предидущий поток не завершил свою работу, то новый поток его просто обрубает. Как сделать так, чтобы при выполнение потока и при запуске следующего, предидущий выполнялся до конца. |
|||
|
||||
Mutronics |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 17.6.2007 Репутация: нет Всего: нет |
Что-то мне подсказывает, что проблема здесь с Invoke.
|
|||
|
||||
Mutronics |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 17.6.2007 Репутация: нет Всего: нет |
Помогите...
Ааааа... |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Юзайте оператор lock
-------------------- ![]() |
|||
|
||||
Mutronics |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 17.6.2007 Репутация: нет Всего: нет |
mr.DUDA
А можно инфу или пример, ничего по нему найти немогу. |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Да легко: на любое действие, потенциально выполняемое в более чем одном потоке одновременно, ставится оператор lock, разрешающий вход только одному потоку в одно и то же время (второй поток терпеливо ожидает пока первый не выйдет из lock):
-------------------- ![]() |
|||
|
||||
Mutronics |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 17.6.2007 Репутация: нет Всего: нет |
Если это должно выглядеть так, то всеравно неработает !
|
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
locker должен быть не локальной переменной, а полем класса, лучше всего статическим:
Иначе он создаётся каждый раз при входе в метод и теряется возможность блокировать одновременное выполнение нескольких потоков (в каждом потоке свой экземпляр locker-а). И помещать lock лучше не вокруг Invoke, а внутри - мало ли, захотим заменить на BeginInvoke... -------------------- ![]() |
|||
|
||||
Mutronics |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 17.6.2007 Репутация: нет Всего: нет |
mr.DUDA, И даже так неработает, всеравно предидущие потоки не завершаются при открытии новых
Могу выслать исходник, сам глянешь. Это сообщение отредактировал(а) Mutronics - 12.7.2007, 09:47 |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Странно. Может их кто рубит (например Abort с последующим Join), или к примеру сами валятся с исключением... Можно попробовать поставить try..catch в методе test.
-------------------- ![]() |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
оператор lock блокирует доступ к членам объекта.
Посторонний поток выполнения остановится только если он обращается в данный момент к этому объекту. Если посторонний поток (не тот, который лочит объект) выполняет в данный момент какую-то другую работу, то ему ничего не препятствует ее выполнять...
Mutronics, посмотри в сторону AutoResetEvent или WaitHandle (WaitHandle.WaitOne() например) -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
mr.DUDA |
|
||||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Неправильно. Оператор lock, дословно цитируя мсдн, выполняет следующее:
Ни о каком блокировании членов объекта thisLock речи не идёт и идти не может.
Между прочим, lock внутри себя также юзает объект синхронизации - Monitor (методы Enter, Leave). -------------------- ![]() |
||||
|
|||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |