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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Использование Progress Bar 
:(
    Опции темы
soros26
Дата 9.6.2010, 02:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Подскажите пожалуйста что в этом коде(WPF) не так.
Скорее всего в этом коде куча ошибок smile 
Собственно есть вообще одна длительная команда, которую НЕ требуется в цикле выполнять(а в коде ниже она в циклеsmile. И процесс этот может идти разное время на разных машинах-в зависимости от расторопности ОСи. Потому простой таймер наверно не пойдет.
Надо как-то с потоками оперировать. Но как? В куче примеров в интернетах в основном все  по таймеру да в цикле...
Код

        ProgressBar PBar1 = new ProgressBar();
        System.ComponentModel.BackgroundWorker mWorker;
        private delegate void UpdateProgressBarDelegate(System.Windows.DependencyProperty dp, Object g);

        public void CheckUrl(object sender, System.ComponentModel.DoWorkEventArgs e)
        {
            PBar1.Value = 0;
            for (int g = 0; g <= 100; g++)
            {
                PBar1.Value+=1;
                UpdateProgressBarDelegate updatePbDelegate = new UpdateProgressBarDelegate(PBar1.SetValue);
              if (mWorker.CancellationPending)
                {
                    e.Cancel = true;
                    break;
                }
              mWorker.ReportProgress(g);

             //здесь идет длительная работа функций...
                Dispatcher.Invoke(updatePbDelegate,
                     System.Windows.Threading.DispatcherPriority.Background,
                     new object[] { ProgressBar.ValueProperty, g });           
            }      
        }


private void button10_Click(object sender, RoutedEventArgs e)
        {
           
            PBar1.IsIndeterminate = false;
            PBar1.Orientation = Orientation.Horizontal;
            PBar1.Width = 200;
            PBar1.Height = 20;
mWorker = new System.ComponentModel.BackgroundWorker();
                mWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(CheckUrl); //
                mWorker.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(progressWorker_ProgressChanged);
                mWorker.WorkerReportsProgress = true;
                mWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(progressWorker_RunCompleted);
                mWorker.RunWorkerAsync();
          }
 private void progressWorker_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
        {
            PBar1.Value = e.ProgressPercentage;
          
        }



PM   Вверх
soros26
Дата 11.6.2010, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сам себе отвечу...
Нашел примерчик: http://www.c-sharpcorner.com/UploadFile/dh...ilverlight.aspx
Он для Silverlight, но в WPF все аналогично же ))
Поскольку в моем случае процессы, действия разные и невозможно определить их продолжительность, то надо просто поставить PBar1.IsIndeterminate = true; без всяких циклов. 
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




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


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

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