Terminator2
|
member
|
|
|
|
Рег.: 27.03.2006
|
Сообщений: 118
|
|
Рейтинг: -38
|
|
Проблема потоков в .NET 2005
23.01.2007 00:41
|
|
|
Проблема состоит в следующем: есть простой элемент управления на форме (listBox). В какой-то момент запускается поток, который пытается загрузить в этот listBox элемент. При этом выскакивает исключение: "Cross-thread operation not valid: Control 'lstBox1' accessed from a thred other that the thread it was created on". Пробовал изменять свойство потока ApartmentState (первое, что в голову пришло),- не помогает. Подскажите, пожалуйста, как заставить два потока работать с одним элементом управления.
|
|
Xanderus
|
экстеоретик
|
|
|
|
Рег.: 25.04.2006
|
Сообщений: 1365
|
Из: Уже не в В
|
Рейтинг: 370
|
|
|
Элементы управления вроде ж не thread-safe. Или я ошибаюсь? Как это обойти? События, мутексы и т. п... (в зависимости от того, что нужно и что удобней)
|
|
Croc
|
|
|
|
|
Рег.: 05.07.2004
|
Сообщений: 3577
|
|
Рейтинг: 1379
|
|
|
Элементы управления в дотНете не потоко-безопасны. В MSDN поищи How to: Make Thread-Safe Calls to Windows Forms Controls
|
|
Terminator2
|
member
|
|
|
|
Рег.: 27.03.2006
|
Сообщений: 118
|
|
Рейтинг: -38
|
|
Re: Проблема потоков в .NET 2005
[re: Xanderus]
23.01.2007 00:55
|
|
|
Просто поток отработал, посчитав и создав нужный мне объект, далее в конце я просто хочу этот объект кинуть в listBox. А он, паскуда, мне выдает такую проблему. Может можно как-то отследить, когда поток закончится? Вроде нельзя. Поэтому куда тут можно прилепить обработчик - ума не приложу=(
|
|
Terminator2
|
member
|
|
|
|
Рег.: 27.03.2006
|
Сообщений: 118
|
|
Рейтинг: -38
|
|
|
Блин, а вот MSDN-а то у меня как раз и нету=( Так что приходиться ставить точку после объекта и смотреть все доступные манипуляции с ним. Пока ни к чему не привело.
|
|
Mike
|
Ызарг
|
|
|
|
Рег.: 02.11.2002
|
Сообщений: 8098
|
|
Рейтинг: 2147
|
|
|
Quote:
Блин, а вот MSDN-а то у меня как раз и нету=( Так что приходиться ставить точку после объекта и смотреть все доступные манипуляции с ним. Пока ни к чему не привело.
Использовать нужно Invoke()
|
|
Terminator2
|
member
|
|
|
|
Рег.: 27.03.2006
|
Сообщений: 118
|
|
Рейтинг: -38
|
|
Re: Проблема потоков в .NET 2005
[re: Mike]
23.01.2007 01:15
|
|
|
При использовании Invoke() действительно проблема разрешается, но при этом приложение замирает. Т.е. пропадает вообще смысл использования потока. Я-то хочу, что бы при долгом счете проценты бежали и свернуть можно было форму и т.д.
|
|
Terminator2
|
member
|
|
|
|
Рег.: 27.03.2006
|
Сообщений: 118
|
|
Рейтинг: -38
|
|
Re: Проблема потоков в .NET 2005
[re: Mike]
23.01.2007 01:16
|
|
|
Может, конечно, чего не так делаю?
modelling = new ThreadStart(Modelling); modelling_control = new Thread(modelling); modelling.Invoke();
void Modelling() { }
|
|
DarkGray
|
Carpal Tunnel
|
|
|
|
Рег.: 30.09.2002
|
Сообщений: 31415
|
|
Рейтинг: 8952
|
|
|
|