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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2009, 10:50   #1
Neymexa
Proffesional
Форумчанин
 
Аватар для Neymexa
 
Регистрация: 18.11.2008
Сообщений: 417
По умолчанию ПОТОК

создал простую прогу - она добавляет цифры в Listbox
как сделать чтобы форма не подвисала через backgroundworker?
О, степь родимая, как я скучаю по тебе...
Neymexa вне форума Ответить с цитированием
Старый 11.05.2009, 11:01   #2
atomicxp
Форумчанин
 
Аватар для atomicxp
 
Регистрация: 01.05.2009
Сообщений: 110
Лампочка

Цитата:
Сообщение от Neymexa Посмотреть сообщение
создал простую прогу - она добавляет цифры в Listbox
как сделать чтобы форма не подвисала через backgroundworker?
В поток засовывается как обычно, если это конечно уж так необходимо. А в целом для начала надо заключить эти вызовы между методами BeginUpdate и EndUpdate.

Код:
public void AddToMyListBox()
{
   // Stop the ListBox from drawing while items are added.
   listBox1.BeginUpdate();

   // Loop through and add five thousand new items.
   for(int x = 1; x < 5000; x++)
   {
      listBox1.Items.Add("Item " + x.ToString());   
   }
   // End the update process and force a repaint of the ListBox.
   listBox1.EndUpdate();
}
atomicxp вне форума Ответить с цитированием
Старый 11.05.2009, 12:43   #3
OrdJONY
.NET-чик
Форумчанин
 
Аватар для OrdJONY
 
Регистрация: 24.03.2007
Сообщений: 569
По умолчанию

Есть проще способ, просто реагируйте на событие ProgressChanged. А в DoWork просто вызывайте функцию ProgressChanged и передавайте любой пользовательский объект
"Разработка под веб - как работа с пылесосом: нихрена не прикольно, но засасывает"
Мо маленький городок
OrdJONY вне форума Ответить с цитированием
Старый 11.05.2009, 14:21   #4
atomicxp
Форумчанин
 
Аватар для atomicxp
 
Регистрация: 01.05.2009
Сообщений: 110
Стрелка

Цитата:
Сообщение от OrdJONY Посмотреть сообщение
Есть проще способ, просто реагируйте на событие ProgressChanged. А в DoWork просто вызывайте функцию ProgressChanged и передавайте любой пользовательский объект
На самом деле, чтобы программа не подвисала, на небольших значениях (несколько тысяч) достаточно отключить перерисовку, как я и показал. А фоновый режим необходим лишь для продолжительных по времени операций (больше секунды). Перерисовку по любому отключать надо, иначе будет работать медленнее и ещё мелькать.

Но нужен ли фоновый поток, вот это вопрос. К тому же ProgressChanged только для отображения прогресса, а так хватит запуска RunWorkerAsync и обработчика события DoWork. Впрочем для меня всегда важнее была скорость, именно поэтому я и экспериментировал на базе с десятью миллионами записей для обновления списка в режиме реального времени по сто тысяч за раз. Фоновый поток для нескольких десятков тысяч элементов, иначе смысла нет его ставить.

Последний раз редактировалось atomicxp; 11.05.2009 в 14:25.
atomicxp вне форума Ответить с цитированием
Старый 11.05.2009, 18:32   #5
Neymexa
Proffesional
Форумчанин
 
Аватар для Neymexa
 
Регистрация: 18.11.2008
Сообщений: 417
По умолчанию

Цитата:
Сообщение от atomicxp Посмотреть сообщение
В поток засовывается как обычно, если это конечно уж так необходимо. А в целом для начала надо заключить эти вызовы между методами BeginUpdate и EndUpdate.

Код:
public void AddToMyListBox()
{
   // Stop the ListBox from drawing while items are added.
   listBox1.BeginUpdate();

   // Loop through and add five thousand new items.
   for(int x = 1; x < 5000; x++)
   {
      listBox1.Items.Add("Item " + x.ToString());   
   }
   // End the update process and force a repaint of the ListBox.
   listBox1.EndUpdate();
}
не работает
О, степь родимая, как я скучаю по тебе...
Neymexa вне форума Ответить с цитированием
Старый 12.05.2009, 01:03   #6
atomicxp
Форумчанин
 
Аватар для atomicxp
 
Регистрация: 01.05.2009
Сообщений: 110
Радость

Цитата:
Сообщение от Neymexa Посмотреть сообщение
не работает
Это пример из MSDN, они все работают.
atomicxp вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поток и progressbar TaTT DoGG Общие вопросы .NET 24 06.05.2009 17:59
Поток Черничный Общие вопросы Delphi 5 27.09.2008 21:23
Поток в никуда... prizrak1390 Работа с сетью в Delphi 1 30.06.2008 10:32
Убить поток Баламут Общие вопросы Delphi 3 22.03.2008 05:04