2009-12-20 2 views
2

Я кодирую заставку в VB.Net, которая отображается в течение 3 секунд, а затем отображает экран входа в систему. Но всплеск появляется даже после входа в систему, и я сказал, чтобы всплеск скрылся. Вот мой код:Проблемы с заставкой экрана

Public Class frmSplash 

    Private Sub frmSplash_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     Me.Show() 
     System.Threading.Thread.Sleep(3000) 
     Me.Hide() 
     frmLogin.Show() 
    End Sub 
End Class 
+1

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

+0

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

+0

Для этого необходим диалог About. – SLaks

ответ

2

Вызов Thread.Sleep в потоке пользовательского интерфейса будет заморозить программу.

Кроме того, перед загрузкой формы отображается событие Load, поэтому вы вызываете Hide перед тем, как форма будет показана в первую очередь.

Вам необходимо добавить компонент Timer в форму, установите его Interval в 3000 и вызвать Close в Tick случае. Затем вызовите метод Start таймера в форме Shown.

+0

Я понимаю, что если вы поместите '.Show' в ваше событие Load, оно будет показано до конца события загрузки. Но, возможно, лучше, если вместо этого пользователь спрашивает событие «Shown», которое запускается после отображения формы. – Abel

+0

У вас есть точка. Однако во время вызова «Сон» никакие сообщения Windows не будут обрабатываться, поэтому форма не будет нарисована и, вероятно, не будет видна вообще. – SLaks

+0

В качестве альтернативы, использование Application.DoEvents() может работать, если вы можете заставить его отключиться во время паузы. – Cyclone

0

Ваш оператор сна заморозит ваш пользовательский интерфейс, попробуйте запустить его из другого потока.

+0

Правильная вещь здесь - использовать таймер WinForms; он будет более эффективным, чем создание потока. – SLaks

+0

Как использовать таймер для этого? –

+0

@Mark: Смотрите мой ответ. – SLaks

0

Спасибо, ребята! Это сработало: Публичный класс frmSplash

Private Sub frmSplash_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    SplashTimer.Start() 
End Sub 

Private Sub SplashTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SplashTimer.Tick 
    SplashTimer.Stop() 
    frmLogin.Show() 
    Me.Hide() 
End Sub 
End Class 
Смежные вопросы