Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.fds-net.ru/showflat.php?Number=5696019&src=arc&showlite=
Дата изменения: Unknown
Дата индексирования: Wed Apr 13 10:25:54 2016
Кодировка: Windows-1251
Проблема потоков в .NET 2005 - Public forum of MSU united student networks
Root | Google | Yandex | Mail.ru | Kommersant | Afisha | LAN Support
  
Technical >> Development (Archive)

Страницы: 1
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
  Re: Проблема потоков в .NET 2005 [re: Terminator2]
      23.01.2007 00:52
 

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

Croc

Рег.: 05.07.2004
Сообщений: 3577
Рейтинг: 1379
  Re: Проблема потоков в .NET 2005 [re: Terminator2]
      23.01.2007 00:55
 

Элементы управления в дотНете не потоко-безопасны. В 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
  Re: Проблема потоков в .NET 2005 [re: Terminator2]
      23.01.2007 00:58
 

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

Mike
Ызарг

Рег.: 02.11.2002
Сообщений: 8098
Рейтинг: 2147
  Re: Проблема потоков в .NET 2005 [re: Terminator2]
      23.01.2007 01:07
 

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
  Re: Проблема потоков в .NET 2005 [re: Terminator2]
      23.01.2007 01:20
 

прочитать для начала допустим http://rsdn.ru/article/dotnet/multithrwinfrms.xml

Страницы: 1

Technical >> Development (Archive)

Дополнительная информация
1 зарегистрированных и 1 анонимных пользователей просматривают этот форум.

Модераторы:  DarkGray 

Печать темы

Права
      Вы можете создавать новые темы
      Вы можете отвечать на сообщения
      HTML отключен
      UBBCode включен

Рейтинг:
Просмотров темы:

Переход в