Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение значения progressbar'a из backgroundwork, При выполнении запроса к БД 
:(
    Опции темы
medicdim
Дата 25.2.2010, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 19.1.2007

Репутация: нет
Всего: нет



Вопрос в следующем:
Т.к. база данных довольно большая и запросы могут выполняться достаточно долго есть необходимость информировать пользователя о том, что работа идёт.
Вот код заполнения грида:
Код

            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "select top "+ txtPerPage.Text +" tel_number, short_name, surname, name, last_name, region, city "+
            "from data where region='"+drdRegion.SelectedItem.ToString()+"' and is_processed=0";
            cmd.Connection = conn;
            cmd.CommandTimeout = cmd.CommandTimeout * 100;
            conn.Open();
            SqlDataReader reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                TCity = (string)reader[6];

                dataGridView1.Rows.Add(SearchCode(TCity)+reader[0].ToString(), reader[1], reader[2], reader[3],
                    reader[4], reader[5], reader[6]);
            }
            conn.Close();


Пытаюсь сделать следующим образом:

Код

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            for (int i = 0; i < 1000; i++)
            {
                backgroundWorker1.ReportProgress(i);
                Thread.Sleep(2);
                if (backgroundWorker1.CancellationPending)
                {
                    e.Cancel = true;
                    return;
                }
                if (i == 999) i = 0;
            }
        }

        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            //this.progressBar1.Value = e.ProgressPercentage;
            this.progressBar1.Invoke(new MethodInvoker(delegate()
            {
                progressBar1.Value = e.ProgressPercentage;
            }));
        }


Но в процессе выполнениия запроса и заполнения грида форма со всеми контролами лочится и отображение progressBar'а не меняется.
Как мне сделать так, чтобы эти изменения происходили.
Зарание спасибо!
PM MAIL   Вверх
Fortnox
Дата 25.2.2010, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

Репутация: 2
Всего: 22



medicdim, заполнять грид в другом потоке? Например в потоке BackgroundWorker.
PM MAIL   Вверх
medicdim
Дата 25.2.2010, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 19.1.2007

Репутация: нет
Всего: нет



Спасибо. Тоже вариант. Как сделаю отпишусь по результату.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0792 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.