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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отобразить прогресс ( 
V
    Опции темы
neiron
  Дата 23.7.2009, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Необходимо отобразить прогресс выполнения операции.
Есть форма на wpf, есть библиотека, которая делает необходимые вещи (обрабатывает картинки).
Обработка длится долго. 
При этом обработка данных строится по следующему принципу:
создаётся класс Загрузчик из той библиотеки. Он создаёт несколько классов-"Коллекций" изображений, каждая из которых затем выполняет необходимые действия над группой изображений. 

На форме мне необходимо вывести прогресс обработки - сколько сделано, сколько осталось. 

Что посоветуете? 

У меня какая-то непонятная мысль о привязке копошится в голове. 
Но, как я понимаю, нужно чтобы Коллекции сообщали Загрузчику о ходе работы, а тот уже предоставлял информацию для морды.

Да, видимо сам загрузчик должен будет работать в другом потоке, ибо фейс желательно немного юзабельным оставить. 

Итого: надо протолкнуть внутренние данные из одного потока в другой (WPF) в режиме реального времени. Как-то так.
Конечно, хочется как можно проще и быстрее))

PS. Анимашку не предлагать. Она и так сейчас стоит)


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


Новичок



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

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



Можно создать интерфейс (например IProgressCallBack) в котором объявить 2 метода ProgressChange и ProgressComplit. Пронаследовать от него свою форму. 
Получиться что-то типа :
Код

internal interface IProgressCallBack
    {
       void ProgressChange (int param);
       void ProgressComplit(bool flag);
    }
    public class MainForm: IProgressCallBack
                  ...


Затем создать поток :


Код

Thread _threadObj = new Thread(SomeMthod);
_threadObj.Start(this); - //this это то что имплеминтирует методы интерфейса

Объявляем делегаты:
Код

        private delegate void ProcessChangeHendler(int param);
        private delegate void ProcessCompliteHendler(bool flag);

Затем в самой процедуре SomeMthod:
Код

public void SomeMethod(object obj)
{
      var callBack = (IProgressCallBack)obj;
      //выполнение каких-либо действий
      // подсчет прогресса:
      mainForm.Dispatcher.BeginInvoke(new ProcessChange(callBack.ProgressChange),34);
     //все выполнилось до конца - сообщаем что процесс завершился
      mainForm.Dispatcher.BeginInvoke(new ProcessCompliteHendler(callBack. ProgressComplit),true);
}

mainForm - это объект класса формы
PM MAIL   Вверх
neiron
  Дата 23.7.2009, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Угу, спасибо. Это всё было понятно. 
Я не мог додуматься лишь до одной мелочи - отнаследовать от исполняющего класса. Ибо сам этот класс в своей библиотеке о форме ничего не должен был знать. Утро, как обычно, оказалось вечера мудренее)
Лови плюс)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




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


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

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