Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
SergioXY
0 / 0 / 0
Регистрация: 15.12.2012
Сообщений: 20
1

Начальная форма входа пока грузится основное приложение - реализация

22.08.2015, 23:35. Просмотров 431. Ответов 6
Метки нет (Все метки)

Всем доброго времени суток. Такая проблемка – создал приложение, а оно тяжелое - долго запускается. Идет загрузка базы данных, куча гридов и т.д. При нажатии на ярлык запуска несколько сек. ждёшь и думаешь, а оно вообще думает запускаться? Есть такая мысль, а что если сделать мини приложение из одной формы (легкое) – запускаешь его, а оно и говорит: “Добро пожаловать, подождите немножко идет загрузка данных”. А в реальности это мини приложение запускает в другом потоке тяжелое приложение и когда тяжелое полностью загрузится, оно даст отмашку этому маленькому – что пора сворачиваться. Да это маленькое приложение или форма приветствия должна оставаться сверху основного приложения до своего принудительного закрытия. Я пробовал это реализовать сам, потратил кучу времени, но выходят одни косяки... то форма не в том потоке сделана то данные... Поискал готовое решение – тоже не нашел, всё не то. Помогите дельным (желательно подробным советом) или может есть ссылка на готовое решение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2015, 23:35
Ответы с готовыми решениями:

заставка пока грузится форма
Здраствуйте есть программа которая делает выборку информации, при запуске грузится 2-5сек ...

Как завершить основное приложение из приложения апдейтера?
Тут была тема про обновление программы, ну то есть программа обновляет сама себя. Так вот я пишу...

Можно ли использовать перекомпилированную dll не закрывая основное приложение
Добрый день! Подскажите, пожалуйста, возможно ли следующее, и, если возможно, натолкните на...

Загрузить сначала Form2, а только потом - основное приложение
Подскажите кто знает. Нужно сделать что бы загрузилась не основная приложение а форма номер два и...

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

6
Storm23
Эксперт .NETАвтор FAQ
6232 / 3738 / 1415
Регистрация: 11.01.2015
Сообщений: 4,906
Записей в блоге: 31
22.08.2015, 23:44 2
SergioXY,
В Program.cs:
C#
1
2
3
4
5
6
7
8
9
10
11
12
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
 
            var splash = new Splash();
            splash.Show();
            splash.Refresh();
            Application.Idle += delegate { splash.Close(); };
 
            Application.Run(new MainWindow());
        }
Где Splash - ваша форма-заставка.
MainWindow - главная форма.
2
ksk
613 / 481 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
22.08.2015, 23:52 3
Чтобы избежать таких проблем загрузку данных можно запускать из обработчика события FormShown главной формы приложения, причём в отдельном потоке. И показывать прогресс в статус баре.
1
SergioXY
0 / 0 / 0
Регистрация: 15.12.2012
Сообщений: 20
23.08.2015, 01:12  [ТС] 4
Вариант Storm23 работает - проверил. Да и ksk наверное тоже, хотя не пробовал. Ну вот немножко не совсем так, как бы хотелось. На разных по мощности компах это маленькое окно приветствия и просьбы ожидания появляется на разное время. На мощном стационарном i7 доли секунды на ноуте - около 2-4 сек. Короче, не всегда успеваешь даче прочитать, что "Программка такая - то" и "идет загрузка". Не плохо было бы, что бы это окно зависло на лишние 5-7 сек. Это было бы более эстетично или логично или удобно... ну как-то так. Титры ведь в фильмах не за 3 сек. показывают, а бывает что и мин. 10 идут.
0
Woldemar89
TheGreatCornholio
1165 / 653 / 272
Регистрация: 30.07.2015
Сообщений: 2,263
Завершенные тесты: 1
23.08.2015, 10:04 5
Добавь в св-во Shown формы splash код:
C#
1
2
3
4
5
6
        using System.Threading;
        private void splash_Shown(object sender, EventArgs e)
        {
            Thread.Sleep(5000);
            this.Close();
        }
Или:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        private void splash_Shown(object sender, EventArgs e)
        {
        var t1 = DateTime.Now;
        var twait = TimeSpan.FromMilliseconds(5000);
        while (true)
                       {
             if ((DateTime.Now - t1) >= twait) break;
                
             Application.DoEvents();
               
                       }
        this.Close();
        }
Ну или типа того, короче ты понял, я думаю.
0
ksk
613 / 481 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
23.08.2015, 10:07 6
Цитата Сообщение от SergioXY Посмотреть сообщение
Не плохо было бы, что бы это окно зависло на лишние 5-7 сек
Ну, это же легко сделать. Закрывать окно когда (всё загружено)&&(прошло 5-7 сек с момента показа окна).

А вообще сплаш скрин - это наследие однопоточных приложений, когда прятали процесс загрузки под содержимым окна "About". Так-то пользователь знает, что он запускает ( а если не знает, нам он нужен ? ).

Ещё один способ не давать пользователю уснуть во время запуска программы - это загружать только "первый слой" данных, необходимый для нчала работы. А потом подгружать олько нужное исходя из того, что делает пользователь.
0
SergioXY
0 / 0 / 0
Регистрация: 15.12.2012
Сообщений: 20
23.08.2015, 14:10  [ТС] 7
Спасибо Storm23, в принципе этот вариант рабочий, ну и можно сказать, меня уже устраивает. Если попробовать улучшить его кодом от Woldemar89
C#
1
2
3
4
5
6
using System.Threading;
        private void splash_Shown(object sender, EventArgs e)
        {
            Thread.Sleep(5000);
            this.Close();
        }
То выходит такая ситуация: Открывается маленькая форма приветствия (тут всё как и надо), потом она исчезает через буквально через секунду-две, вместо неё появляется основное окно программы без ничего - белый квадрат, проходит ещё сек три и основное окно приобретает нормальный вид. Получается что около 3-х сек. я смотрю на белый квадрат посреди экрана. В принципе меня и так уже всё устраивает, это я написал для тех, кому это может быть интересно... Спасибо за ответы.
0
23.08.2015, 14:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2015, 14:10

Реализация авто входа
ребята вроде написал вроде должно работать , но не работает кто может подсказать че не так ...

Форма входа и регистрации с локальной бд
Всем привет. Прошу помощи с программой. На форме имеется 2 текстбокса(логин и пароль), 3...

Остановить выполнение функции пока открыта форма
Всем привет имеется обработка private void InsertData_Click(object sender, EventArgs e) {...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru