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

Начальная форма входа пока грузится основное приложение - реализация - C#/.NET 4.x

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

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

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

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

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

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

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

6
Storm23
Эксперт .NETАвтор FAQ
5907 / 3506 / 1307
Регистрация: 11.01.2015
Сообщений: 4,616
Записей в блоге: 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
612 / 480 / 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
1153 / 641 / 269
Регистрация: 30.07.2015
Сообщений: 2,243
Завершенные тесты: 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
612 / 480 / 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 текстбокса(логин и...

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

Добавить форму, которая запускается вперед основной(форма входа)
Здравствуйте. Есть проект, в которую нужно добавить форму входа, которая как...

Запретить приложению завершаться, пока открыта хоть одна форма.
Привет! У меня такое приложение, примерно как шестой интернет эксплорер....


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

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

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