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

왜이 작업을 수행 하시겠습니까? 최종 사용자의 경우 프로그램이 시작될 때마다 무의미한 3 초 대기보다 더 성가신 일이 없습니다. 백그라운드에서 나머지 프로그램을로드하는 경우에만 시작 화면을 표시해야합니다. – SLaks

+0

일부 프로그램에서는 시작 화면이 유용하므로 프로그램 버전, 프로그램 작성자 또는 기타 유용한 정보를 사용자에게 알릴 수 있습니다. 그러나 당신이 그것을 보여주기 위해 그것을 보여 주면 나는 조금은 무의미합니다. – Cyclone

+0

정보 대화 상자의 용도입니다. – SLaks

답변

2

UI 스레드에서 Thread.Sleep을 호출하면 프로그램이 정지됩니다.

또한 Load 이벤트는 양식이 표시되기 전에 실행되므로 폼이 처음에 표시되기 전에 Hide을 호출합니다.

타이머 구성 요소를 폼에 추가하고 Interval3000으로 설정하고 Tick 이벤트에 Close을 호출해야합니다. 그런 다음 Shown 양식의 타이머 Start 메서드를 호출하십시오.

+0

Load 이벤트에'.Show'를 배치하면로드 이벤트가 끝나기 전에 표시된다는 것을 이해할 수 있습니다. 그러나, Asker가 대신에 'Shown' 이벤트를 사용하면 폼이 표시된 후에 해고되는 것이 더 나을 것입니다. – Abel

+0

포인트가 있습니다. 그러나'Sleep' 호출 중에 Windows 메시지가 처리되지 않으므로 양식이 채색되지 않고 전혀 표시되지 않습니다. – SLaks

+0

또는 Application.DoEvents()를 사용하면 일시 중지 된 동안 실행되도록 설정할 수 있습니다. – Cyclone

0

수면 진술로 인해 UI가 정지되었습니다. 다른 스레드에서 실행 해보십시오.

+0

올바른 일은 WinForms 타이머를 사용하는 것입니다. 스레드를 만드는 것보다 효율적입니다. – SLaks

+0

타이머를 어떻게 사용합니까? –

+0

@ 마크 : 내 대답보기. – 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