2009-11-04 3 views
7

Я показываю форму всплеска, открывая новую цепочку непосредственно перед запуском моей основной формы.Метод отображения экрана всплеска C#

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

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

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

Спасибо.

Отрывок из Main:

// 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(); 
     } 
    } 
+2

Скачать отражатель и посмотреть, как это было сделано для VB =). –

+0

Я единственный, кто ненавидит заставки? Просто загрузите приложение для фрикинга и перестаньте тратить свое время. –

+0

@Trickster: Я сделал именно это и обнаружил, что в конечном итоге вызов Application.Run используется для отображения формы всплеска. Спасибо за идею! Я отметил ваш ответ как принятый. – Andy

ответ

3

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

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

+0

@ Хенк: На самом деле, я думаю, это может быть неверно. Я считаю, что вызов Application.Run из нового потока запустит новый поток пользовательского интерфейса, отличный от основного. Посмотрите здесь: http://stackoverflow.com/questions/745057/how-to-start-a-ui-thread-in-c Andy

+0

Repost ссылки :) http://stackoverflow.com/ вопросы/745057/how-to-start-a-ui-thread-in-c – Andy

+0

Andy, вариант 2 не использует (дополнительно) App.Run() –

1

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

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

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

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

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

+0

«Если вы не входите в многопоточность» - Это *, что * трудно создать экземпляр 'new thread()'? –

+0

На более конструктивной ноте - заставка для фотошопа заставляет его выглядеть так, будто он загружается почти мгновенно, даже если это не так, ИМО. –

Смежные вопросы