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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> progressBar, Создать 
V
    Опции темы
maxnoskov
Дата 1.12.2006, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 21.6.2006
Где: Мурманск

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



Помогите. Есть главная форма приложения. На ней DataSet. Я заполняю DS из xml файла с помощью WriteXml. Как мне одновременно со считыванием файла открыть окно в котором будет в это время работать progressBar.
PM MAIL   Вверх
ivashkanet
Дата 1.12.2006, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

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



maxnoskov, в чем конкретно вопрос?
Как показать окно?
Код

dialog.ShowDialog()

Или как совместить показ диалога с загрузкой?
Тогда нужно будет загрузку сделать в отдельном потоке, а потом вернуть датасет из потока

Реального прогресбара у тя не получится, но бегущая строка будет точно  smile 

Цитата(maxnoskov @  1.12.2006,  12:17 Найти цитируемый пост)
Я заполняю DS из xml файла с помощью WriteXml

А может Лоад?

Добавлено @ 13:36 
или Read?
PM MAIL WWW ICQ   Вверх
maxnoskov
Дата 1.12.2006, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 21.6.2006
Где: Мурманск

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



Цитата

Или как совместить показ диалога с загрузкой?

Именно совместить!
Цитата

Тогда нужно будет загрузку сделать в отдельном потоке, а потом вернуть датасет из потока

Можно пример?
Цитата

Реального прогресбара у тя не получится, но бегущая строка будет точно

А в чем разница?
Цитата

или Read?

Конечно!
PM MAIL   Вверх
ivashkanet
Дата 1.12.2006, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

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



Цитата(maxnoskov @  1.12.2006,  12:46 Найти цитируемый пост)
А в чем разница?

Разница в том, что, по идее, когда закончится полоска должна закончиться и загрузка данных.
Но ReadXML не предоставляет информацию сколько еще осталось (строк, элементов, ...). 
Значит нельзя рассчитать время окончания, а значит придеться прогонять статусбар в цикле: закончил -- начинай сначала.
Цитата(maxnoskov @  1.12.2006,  12:46 Найти цитируемый пост)
Можно пример?

Могу идею (на реализацию времени нет).
1) Делаешь метод ThreadDo(), в котором  создаешь датасет, загружаешь его, а в конце передаешь в главное приложение.
2) Создашь диалог в котором только один прогресбар. Который сразу же запускается и гоняет полоску пока не получит информацию от формы, что датасет передали. 
3) Когда нужно загрузить данные --- запускаешь поток. а потом этот диалог
Все smile

PM MAIL WWW ICQ   Вверх
DarkDragon
Дата 1.12.2006, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GradVin
**


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

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



ivashkanet, делаю работу за тебяsmile

Код


private LoadFrm frm = new LoadFrm(); // твоя форма с прог баром
private DataSet ds;

private void ProcessDo()
{
   for(;;)
   {
     if (frm.progbar1.Value >= frm.progbar1.Maximum)frm.progbar1.Value = 0;
     frm.progbar1.Value++;
   }
}

private void LoadDS (string path)
{
  System.Threading.Thread thr =  new System.Threading.ThreadStart (ProcessDo);
  if (frm == null)frm = new LoadFrm(); 
  frm.Show();
  thr.Start();
  ds.ReadXML (path);
  thr.Abort();
  frm.Close();
  frm.Dispose();
}



Это сообщение отредактировал(а) DarkDragon - 1.12.2006, 22:10
PM MAIL   Вверх
maxnoskov
Дата 19.2.2007, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 21.6.2006
Где: Мурманск

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



Перешел на BackgroundWorker, но реализация та же. Спасибо всем.
PM MAIL   Вверх
ivashkanet
Дата 22.2.2007, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

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



Этот пост преследует цель "чисто похвастаться"  smile 
Ну... может еще кому-то пригодится  smile 

Понадобилось мне сегодня реализовать этот самый прогрессБар. Решил я его сделать с помощью BackgroundWorker.
И так хорошо и прозрачно он у меня получился, что я аж залюбовался  smile 

Это правда VB .Net, но суть-то понятна

Значится, из доп компонент: 
ListBox, Button, ProgressBar и BackgroundWorker
Код

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            ListBox1.Items.Clear()

            Me.Enabled = False

            ToolStripProgressBar.Value = 0
            ToolStripProgressBar.Visible = True
            BackgroundWorker.RunWorkerAsync()
    End Sub

    Private Sub BackgroundWorker_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker.DoWork
        Dim listOfWorkCentres As List(Of String) = ProspeoInteractor.Counters.GetListOfWorkCenters()

        Dim progress As Single = 0
        Dim progressStep As Single = 100 / listOfWorkCentres.Count
        For Each workCentre As String In listOfWorkCentres
            Dim listOfRunningOperations As List(Of String) = ProspeoInteractor.Counters.GetListOfRunningOperations(workCentre)

            If listOfRunningOperations.Count > 0 Then
                BackgroundWorker.ReportProgress(0, "WorkCentre:" + workCentre)

                For Each operation As String In listOfRunningOperations
                    BackgroundWorker.ReportProgress(0, "  " + operation)
                Next
            End If

            progress += progressStep
            BackgroundWorker.ReportProgress(progress)
        Next
    End Sub

    Private Sub BackgroundWorker_ProgressChanged(ByVal sender As System.Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker.ProgressChanged
        If e.UserState Is Nothing Then
            ToolStripProgressBar.Value = e.ProgressPercentage
        Else
            ListBox1.Items.Add(e.UserState)
        End If
    End Sub

    Private Sub BackgroundWorker_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker.RunWorkerCompleted
        Me.Enabled = True
        ToolStripProgressBar.Visible = False
    End Sub

PM MAIL WWW ICQ   Вверх
_Dream
Дата 23.2.2007, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 4.11.2006
Где: Там

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



немного не понял.. это ведь бегущая строка просто подучается?
а как реальный прогресс бар сделать?
PS  и хотелось бы на CS код примера ivashkanet увидеть  smile 

Это сообщение отредактировал(а) _Dream - 23.2.2007, 19:50
--------------------
Noone dies a virgin. Life screws us all...
PM MAIL ICQ GTalk   Вверх
Idsa
Дата 23.2.2007, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

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



Цитата(_Dream @  23.2.2007,  19:49 Найти цитируемый пост)
немного не понял.. это ведь бегущая строка просто подучается?а как реальный прогресс бар сделать?

Все зависит от конкретной задачи. Однако зачастую "реальный" прогресс бар сделать невозможно по объективным причинам. В таких случаях применяется анимация, в частности бегущая строка, которую и реализовал ivashkanet.


Цитата(_Dream @  23.2.2007,  19:49 Найти цитируемый пост)
PS  и хотелось бы на CS код примера ivashkanet увидеть 

А случайно нет трансляторов с VB.NET на C#.NET?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
ivashkanet
Дата 23.2.2007, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

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



Цитата(_Dream @  23.2.2007,  18:49 Найти цитируемый пост)
немного не понял.. это ведь бегущая строка просто подучается?а как реальный прогресс бар сделать?

У меня и сделан реальный прогресбар.
Вся фишка в том, что здесь я знаю сколько этапов обработки у меня есть. 
Их будет ровно столько, сколько элементов будет в массиве listOfWorkCentres
В начале я вычисляю шаг с которым передвигать прогрессбар 
Код
progressStep = 100 / listOfWorkCentres.Count

(Выполненная работа = 100 (%), всего шагов listOfWorkCentres.Count)
Далее на каждом шаге (с каждым новым рабочим центром) я увеличиваю progress на этот шаг и говорю об этом основной форме
Код

progress += progressStep
BackgroundWorker.ReportProgress(progress)

Это в моей ситуации. Но что делать если вся работа состоит из одного тяжелого запроса удаленному сарверу? Тогда реальный прогрессбар (кроме, конечно, было 0, а в конце сразу стало 100) сделать, естественно, нельзя  smile 
Цитата(_Dream @  23.2.2007,  18:49 Найти цитируемый пост)
и хотелось бы на CS код примера ivashkanet увидеть

Ввиду отсутствия дома студии, перевести корректно смогу только в понедельник, но если кто-то сделает это за меня я скажу только спасибо  smile

Добавлено @ 20:38 
Цитата(Idsa @  23.2.2007,  19:08 Найти цитируемый пост)
А случайно нет трансляторов с VB.NET на C#.NET?

Есть, тот же рефлектор --- компилишь VB .Net приложение, а потом дезассемблируешь его под язык C#  smile 

PM MAIL WWW ICQ   Вверх
ivashkanet
Дата 26.2.2007, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

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



Как и обещал, код C#

Код

       private void button1_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            this.Enabled = false;
            toolStripProgressBar.Value = 0;
            toolStripProgressBar.Visible = true;
            backgroundWorker.RunWorkerAsync();
        }

        private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            List<String> listOfWorkCentres = ProspeoInteractor.Counters.GetListOfWorkCenters();
            float progress = 0;
            float progressStep = 100 / listOfWorkCentres.Count;
            foreach (string workCentre in listOfWorkCentres)
            {
                List<String> listOfRunningOperations = ProspeoInteractor.Counters.GetListOfRunningOperations(workCentre);
                if (listOfRunningOperations.Count > 0)
                {
                    backgroundWorker.ReportProgress(0, "WorkCentre:" + workCentre);

                    foreach (string operation in listOfRunningOperations)
                        backgroundWorker.ReportProgress(0, "  " + operation);

                }
                progress += progressStep;
                backgroundWorker.ReportProgress((int)Math.Floor(progress));
            }
        }

        private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            if (e.UserState == null)
                toolStripProgressBar.Value = e.ProgressPercentage;
            else
                listBox1.Items.Add(e.UserState);

        }

        private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            this.Enabled = true;
            toolStripProgressBar.Visible = false;
        }

PM MAIL WWW ICQ   Вверх
777Lich777
Дата 19.12.2010, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(DarkDragon @ 1.12.2006,  22:02)
ivashkanet, делаю работу за тебяsmile

Код


private LoadFrm frm = new LoadFrm(); // твоя форма с прог баром
private DataSet ds;

private void ProcessDo()
{
   for(;;)
   {
     if (frm.progbar1.Value >= frm.progbar1.Maximum)frm.progbar1.Value = 0;
     frm.progbar1.Value++;
   }
}

private void LoadDS (string path)
{
  System.Threading.Thread thr =  new System.Threading.ThreadStart (ProcessDo);
  if (frm == null)frm = new LoadFrm(); 
  frm.Show();
  thr.Start();
  ds.ReadXML (path);
  thr.Abort();
  frm.Close();
  frm.Dispose();
}

Клево сделал работу ничего не скажешь, код не рабочий.
System.Threading.Thread thr =  new System.Threading.ThreadStart (ProcessDo);
Thread и ThreadStart - несовместимые типы
если привести к одному то ругается на поток.
PM MAIL   Вверх
Certain
Дата 19.12.2010, 03:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

System.Threading.Thread t = new System.Threading.Thread(ProcessDo);

--------------------
Работа программиста и шамана имеет много общего - оба боpмочyт непонятные слова, совершают непонятные действия и не могут объяснить, как оно работает.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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