Проблема потоков в .NET 2005

prosh123

Проблема состоит в следующем:
есть простой элемент управления на форме (listBox). В какой-то момент запускается поток, который пытается загрузить в этот listBox элемент. При этом выскакивает исключение:
"Cross-thread operation not valid: Control 'lstBox1' accessed from a thred other that the thread it was created on".
Пробовал изменять свойство потока ApartmentState (первое, что в голову пришло- не помогает.
Подскажите, пожалуйста, как заставить два потока работать с одним элементом управления.

tamusyav

Элементы управления вроде ж не thread-safe. Или я ошибаюсь?
Как это обойти? События, мутексы и т. п... (в зависимости от того, что нужно и что удобней)

tashka

Элементы управления в дотНете не потоко-безопасны. В MSDN поищи How to: Make Thread-Safe Calls to Windows Forms Controls

prosh123

Просто поток отработал, посчитав и создав нужный мне объект, далее в конце я просто хочу этот объект кинуть в listBox. А он, паскуда, мне выдает такую проблему. Может можно как-то отследить, когда поток закончится? Вроде нельзя. Поэтому куда тут можно прилепить обработчик - ума не приложу=(

prosh123

Блин, а вот MSDN-а то у меня как раз и нету=( Так что приходиться ставить точку после объекта и смотреть все доступные манипуляции с ним. Пока ни к чему не привело.

kokoc88

Блин, а вот MSDN-а то у меня как раз и нету=( Так что приходиться ставить точку после объекта и смотреть все доступные манипуляции с ним. Пока ни к чему не привело.
Использовать нужно Invoke

prosh123

При использовании Invoke действительно проблема разрешается, но при этом приложение замирает. Т.е. пропадает вообще смысл использования потока. Я-то хочу, что бы при долгом счете проценты бежали и свернуть можно было форму и т.д.

prosh123

Может, конечно, чего не так делаю?
modelling = new ThreadStart(Modelling);
modelling_control = new Thread(modelling);
modelling.Invoke;
void Modelling
{
}

Dasar

прочитать для начала допустим http://rsdn.ru/article/dotnet/multithrwinfrms.xml
Оставить комментарий
Имя или ник:
Комментарий: