C # Winform Приложения Заставка Preloader - PullRequest
0 голосов
/ 30 августа 2009

Как рассчитать процент загрузки моего приложения на C #. Я хочу показать заставку с индикатором выполнения, показывающим процент загруженного приложения.

Есть ли какой-нибудь стандартный метод \ библиотека для этого, или мне придется просто обновить значение индикатора выполнения в разных точках моего кода загрузки формы.

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

Ответы [ 5 ]

3 голосов
/ 30 августа 2009

Когда пользователь впервые запустит ваше приложение, предположим, что это займет 10 секунд, и покажите индикатор выполнения, который отсчитывает эти 10 секунд. После загрузки приложения сохраните где-нибудь на компьютере пользователя фактическое время, необходимое для загрузки приложения. В следующий раз, когда пользователь загрузит ваше приложение, используйте сэкономленное время вместо исходных 10 секунд.

Это простая и очевидная концепция. Пользователю не важно, какие части приложения загружаются, ему важно, сколько времени это займет, и он хочет увидеть обратный отсчет.

2 голосов
/ 30 августа 2009

Вероятно, самый простой способ сделать это - создать экземпляр вашей формы-заставки в начале события Load вашей стартовой формы. В виде заставки представьте свой ProgressBar как публичное свойство. После создания всплывающей формы задайте для свойства Maximum в ProgressBar количество дискретных шагов, которые вы можете идентифицировать в коде события Load, а затем отобразите его, вызвав метод .Show () (конечно, не .ShowDialog ()). 1001 *

По завершении каждого шага в событии Load вы просто увеличиваете публичное свойство Value в ProgressBar. После завершения всех шагов закройте всплывающую форму и утилизируйте ее.

Это может работать, а может и не работать должным образом, потому что, если ваша форма запуска содержит большое количество элементов управления, тогда хороший процент от общего времени загрузки будет фактически потрачен в конструкторе формы, который будет вызываться до события Load. Лучше всего переместить весь ваш код инициализации в конструктор, а затем создать и показать заставку.

2 голосов
/ 30 августа 2009

Ну, в любом случае вам нужно достаточно точно угадать, сколько времени занимает ваш индивидуальный шаг. Только тогда вы можете дать действительно значимый индикатор выполнения. Вы можете приблизить его, разделив процесс загрузки на несколько этапов, которые, по вашему мнению, примерно равны по времени, и рассчитайте ход выполнения этих этапов.

Альтернативой было бы не показывать индикатор выполнения, а последовательность шагов загрузки, представленных либо текстом, либо графически. Я думаю, что KDE делает это при запуске. Таким образом, вы показываете прогресс, но избегаете ожиданий пользователя в отношении индикатора выполнения (который работает лучше всего, если индикатор выполнения линейно прогрессирует или ускоряется. Если он часто останавливается и скачет, это просто создает впечатление очень медленного процесса).

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

1 голос
/ 30 августа 2009

Прежде всего показывается экран Splash, чтобы создать иллюзию того, что программа запущена, и в любой момент они будут управляться.

Во-вторых, если вы хотите показать индикатор выполнения, вам нужно точно рассчитать количество выполняемых вами задач. Затем покажите метку loading xxxxxx....... и увеличьте индикатор выполнения после завершения каждого элемента.

Что касается вопроса оптимизации времени запуска, то в основном это зависит от функции вашего приложения.

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

Однажды у меня было приложение, в котором мне приходилось показывать иерархию объектов, используя Treeview, каждый узел мог иметь неограниченное количество элементов. Я загрузил объекты верхнего уровня и затем отобразил их в виде дерева и поместил маркер (на самом деле я поставил * в теге узла, который я узнал из какой-то книги .net или статьи, которую я давно прочитал, но вспомнил), когда пользователь нажимал на узел я загружал непосредственными детьми.

0 голосов
/ 30 августа 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...