Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2011, 18:58   #1
Teor
Пользователь
 
Регистрация: 20.12.2008
Сообщений: 46
По умолчанию Проблема синхронизации потоков

Здраствуйте. В процессе написания программы (winForm) в visual studio 2008 (c++) столкнулся со следующей проблемой. В программе в определенный момент создается поток, который начинает искать файлы на диске. При этом главный поток во время такого поиска просто обрабатывает события, что происходят с формой (ну там перетаскивание и т.д.). В определенный момент второй поток должен сделать что-то такое: button1->Enabled=false; Но после такого действия просто вываливается ошибка. Как я понимаю, необходимо синхронизировать потоки, но как сделать, что б в определенный момент первый поток или уснул, или сделал действие, которое требует второй поток, не представляю даже . Прошу помощи в этом вопросе.
Teor вне форума Ответить с цитированием
Старый 16.06.2011, 19:07   #2
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Ищи инфу про события, делегаты и собственно говоря потоки. Твоя проблема уже не раз обсуждалась на форуме именно в этой ветке.
Если кратко, то если используются формы в приложении, то вся работа происходит в 'GUI' потоке и ни один другой поток(а у тебя как раз эта ситуация) не может изменять GUI элементы основного потока. Для этого обычно используют события, т.е. твой поток который искал файлы - закончил работу. В этот момент он вызывает событие с некими параметрами, а основной поток подписан на это событие и он получает управление. Таким образом обращение к GUI элементам происходит в том же потоке где они и были созданы.
Hollander вне форума Ответить с цитированием
Старый 16.06.2011, 22:35   #3
Spawn™Production®
Форумчанин
 
Аватар для Spawn™Production®
 
Регистрация: 06.05.2011
Сообщений: 287
По умолчанию

Поиск по форуму, ну и читаем про InvokeRequired.
Spawn™Production® вне форума Ответить с цитированием
Старый 17.06.2011, 09:38   #4
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Буквально вчера сам искал ответ на этот вопрос. И нашёл:
Код:
label1.Invoke ((Action) delegate	// Thread safe variant for simple "Text = ..."
{
	label1.Text = "qwe";
});
Тот вариант, который в msdn, в несколько раз больше, и выглядит, имхо, весьма коряво.
ds.Dante вне форума Ответить с цитированием
Старый 17.06.2011, 15:50   #5
Teor
Пользователь
 
Регистрация: 20.12.2008
Сообщений: 46
По умолчанию

Всем спасибо, разобрался.
Teor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Контроллер для синхронизации БД Arkuz C# (си шарп) 2 21.04.2011 10:54
Прога для синхронизации каталогов Andr3000 Microsoft Office Excel 4 30.03.2011 14:11
Особенности вертикальной синхронизации Lotles Компьютерное железо 3 14.12.2010 17:48
Проблема синхронизации. beda Microsoft Office Word 3 30.06.2010 13:37
Реализация функций синхронизации потоков. натка Помощь студентам 1 03.01.2008 15:26