| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > WPF и Silverlight > Как отобразить прогресс выполнения |
| Автор: Асоишница 13.11.2014, 23:25 |
| Программа удаляет файлы без возможности восстановления специализированным ПО. При запуске приложения выскакивает окошко, которое предлагает выбрать метод удаления(combobox), добавить файлы или папки и собственно нажать кнопку "Удалить". По нажатию этой кнопки должно выскочить окошко с отображением прогресса выполнения (что сейчас удаляется, сколько из скольки удалено и зелёная полоса выполнения для наглядности), которое по окончанию выдаст информацию: сколько удалено, сколько нет, сколько затрачено времени, а по нажатию ОК перейдёт опять на главное окно. Собственно вопрос как организовать это окно прогресса. Из главного окна при создании окна прогресса передаются параметры: имя метода из combobox.Text, количество элементов для удаления (файлы+папки), собственно сам список List и номер метода из combobox(надо для выбора метода удаления)) Методы удаления прописаны в отдельном модуле и просто вызываются в нужном месте прогресса(отдельно для файла и папки). Скажите куда копать и очень желательно толковый пример на эту тему... С# не знаю, но нужно GUI-приложение, так что выбор пал на Visual Studio 2013 и собственно WPF |
| Автор: Ilya81 14.11.2014, 13:37 |
| Информацию о самом ходе удаления всё равно может знать только модуль, его осуществляющий - последовательность вызовов метода, события и т. п.. А в самом WPF просто - ставите соответствующие control'ы (TextBlock, ProgressBar и прочие) и (в случае MVVM) обновляете свойства, на которые binding'и с вызовом события PropertyChanged, не забывая при необходимости вызвать Dispatcher.Invoke (или BeginInvoke, в зависимости от особенностей модуля удаления). |
| Автор: Uvs 8.12.2014, 10:58 |
| Если не ошибаюсь, эта методика - называется 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() { тут меняется прогресс бар(или ресторан )} Вот, вроде и всё. Надеюсь, это облегчит решение задачи. Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Kak-otobrazit-progress-vypolneniya-id5465141cae2015fc388b4567#findElement_E7045_54855a3aae2015fd7433d213_0 |