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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как отобразить прогресс выполнения 
:(
    Опции темы
Асоишница
Дата 13.11.2014, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Программа удаляет файлы без возможности восстановления специализированным ПО.
При запуске приложения выскакивает окошко, которое предлагает выбрать метод удаления(combobox), добавить файлы или папки и собственно нажать кнопку "Удалить". По нажатию этой кнопки должно выскочить окошко с отображением прогресса выполнения (что сейчас удаляется, сколько из скольки удалено и зелёная полоса выполнения для наглядности), которое по окончанию выдаст информацию: сколько удалено, сколько нет, сколько затрачено времени, а по нажатию ОК перейдёт опять на главное окно.
Собственно вопрос как организовать это окно прогресса.
Из главного окна при создании окна прогресса передаются параметры: имя метода из combobox.Text, количество элементов для удаления (файлы+папки), собственно сам список List и номер метода из combobox(надо для выбора метода удаления))
Методы удаления прописаны в отдельном модуле и просто вызываются в нужном месте прогресса(отдельно для файла и папки).
Скажите куда копать и очень желательно толковый пример на эту тему... smile
С# не знаю, но нужно GUI-приложение, так что выбор пал на Visual Studio 2013 и собственно WPF

PM MAIL   Вверх
Ilya81
Дата 14.11.2014, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 18.4.2014
Где: ЛО, Всеволожский р-н

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



Информацию о самом ходе удаления всё равно может знать только модуль, его осуществляющий - последовательность вызовов метода, события и т. п.. А в самом WPF просто - ставите соответствующие control'ы (TextBlock, ProgressBar и прочие) и (в случае MVVM) обновляете свойства, на которые binding'и с вызовом события PropertyChanged, не забывая при необходимости вызвать Dispatcher.Invoke (или BeginInvoke, в зависимости от особенностей модуля удаления).
PM MAIL ICQ Skype   Вверх
Uvs
Дата 8.12.2014, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Если не ошибаюсь, эта методика - называется call-back вызовы, которая реализуется с помощью обработчиков событий.

Вот, ваш код(class), или область программы, которая выполняет безвозвратное удаление данных.

public class <Удаление>
{
public <имя метода>
  {
    выполнение процесса удаления
  }            
}

Но, класс, выполняющий эти действия - понятия не имеет о прогрессе отображения операций(да и не должен, по логике. У него своя определенная задача). Если, в этот класс передать ссылку какого-нибудь компонента, подобного progressbar - то логически это будет не правильно, т.к. жесткая связность модулей - всегда ухудшает качество. И самый лучший способ, на мой взгляд это добавить в класс обработчик события. Получится вот такая конструкция:

public class <Удаление>
{
public event EventHandler<EventArgs> OnDelete;
public <имя метода>
  {
    выполнение процесса удаления;
        
    любой цикл for/foreach или какой-то другой
    {
    // проверка, инициализ-на ли ссылка обработчика событий
    if(OnDelete != null) OnDelete();

    }        
  }            
}

При создании класса <Удаление> в программе - на ссылку OnDelete "вешается" процедура, выполняющая отображение прогресса.

<Удаление> dlt = new <Удаление>();
dlt.OnDelete += OneStep;
..................................

public void OneStep()
{
тут меняется прогресс бар(или ресторан smile)
}

Вот, вроде и всё. Надеюсь, это облегчит решение задачи.

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




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


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

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