Лучшая практика метода отображения экрана-заставки C #

Я показываю всплывающую форму, начиная новый поток непосредственно перед запуском моей основной формы.

В методе, который запускается этим потоком, я использую Application.Run, как показано в Варианте 1 ниже. Это правильный способ сделать это, или меня ждут проблемы, потому что я дважды вызвал Application.Run? Альтернативой является вариант 2, также показанный ниже, где я вызываю .ShowDialog () для отображения формы.

Сама форма-заставка закрывается через определенное время, контролируемая внутри самой формы, и оба параметра работают хорошо.

Итак, мой вопрос: что предпочтительнее - вариант 1 или вариант 2? Если бы вы могли привести конкретные причины для одной или другой, это было бы здорово.

Благодарю.

Фрагмент Главного:

// Run splash screen thread.
Thread splash = new Thread(new ThreadStart(ShowSplash));
splash.Start();

// Run main application.
Application.Run(new MainForm());

Показать всплывающую форму вариант 1:

    static void ShowSplash()
    {
        Application.Run(new SplashForm());
    }

Показать всплывающую форму вариант 2:

    static void ShowSplash()
    {
        using (SplashForm splash = new SplashForm())
        {
            splash.ShowDialog();
        }
    }
 Andy04 нояб. 2009 г., 19:12
@Trickster: я сделал именно это и обнаружил, что в конечном итоге вызов Application.Run используется для отображения формы-заставки. Спасибо за идею! Я'Вы отметили ваш ответ как принятый.
 Ilya Khaprov04 нояб. 2009 г., 13:55
Скачайте рефлектор и посмотрите, как это было сделано для VB =).
 Winston Smith04 нояб. 2009 г., 14:34
Я единственный, кто ненавидит заставки? Просто загрузите приложение для фрикинга и перестаньте тратить мое время.
 Camilo Martin15 сент. 2010 г., 13:06
@Winston Я частично согласен, особенно в случае, когда приложение не имеет большого значения и показывает заставку как самое верхнее окно.

Ответы на вопрос(3)

Вариант 2, вероятно, столкнется с проблемами, потому что тогда вы используете тот же Mesageloop, что и MainForm, но из другого потока.

Вариант 1 в порядке.

 Henk Holterman04 нояб. 2009 г., 20:07
Энди, Вариант 2 не использует (дополнительный) App.Run ()
 Andy04 нояб. 2009 г., 19:15
@Henk: На самом деле, я думаю, что это может быть неправильно. Я считаю, что вызов Application.Run из нового потока запустит новый поток пользовательского интерфейса, отличный от основного. Посмотрите здесь: <URL-адрес>stackoverflow.com/questions/745057/...>
 Andy04 нояб. 2009 г., 19:17
Репост ссылки :)stackoverflow.com/questions/745057/...
 Andy04 нояб. 2009 г., 20:43
Извините, Хенк, я перепутал свой вариант 1 и 2, когда прокомментировал ваш пост, упс. Спасибо за Ваш ответ.

Я понимаю, что это может быть необычной точкой зрения, но вы решили не использовать заставку и вместо этого показывать информацию настраница приветствия или же 'помощь> около' вместо экрана?

Есть несколько причин сделать это:

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

Заставки, которые показываюту вас есть плагины х, у и г ' установлен можетне могу говорить об этом, пока эта информация не будет загружена. К моменту загрузки этой информации ваше приложение готово к работе, поэтому вылибо закроет заставку, либобудет на пути пользователя.

Если я отвернусь и пропущу заставку,пропущу любую информацию, которую выповторяешь мне. Если 'Срок действия лицензии истекает через 3 дня является частью этой информации, и сегодня пятница, значит, я выигралне понимаю, что в понедельник я не могут использовать приложение. Неясный, но яЯ видел это "."

 Camilo Martin15 сент. 2010 г., 13:16
На более конструктивной ноте - фотошопS заставка выглядит так, как будто загружается почти мгновенно, даже если нетт, имо.
 Camilo Martin15 сент. 2010 г., 13:13
Unless you get into multi-threading - Это трудно создать экземпляр?new thread()
Решение Вопроса

Заставка ожидания до завершения потока

увидеть наиболее оцененный ответ

Ваш ответ на вопрос