스플래시 화면의 개념은 너무 복잡해야한다는 것을 알려주지는 않지만 전체 스플래시 화면이 그려지는 데 어려움을 겪고 있습니다.스플래시 화면 만들기
두 개의 System.Windows.Forms.Form
: RealForm 및 SplashScreen이 있다고 가정 해 보겠습니다. RealForm은 초기 GUI를 포함합니다. RealForm의 로딩 프로세스 (즉, Load
이벤트의 이벤트 핸들러) 중에 RealForm은 데이터베이스에 대한 연결을 만든 다음 연결을 테스트합니다. 이 작업은 몇 초 정도 걸릴 수 있습니다, 그래서이 모든 작업을 수행하기 전에, 정말 같은 시작 화면을 던져보십시오 : 시작 화면이 부분적으로 만 그려됩니다 것을
private void RealForm_Load(object sender, EventArgs e)
{
SplashScreen splash = new SplashScreen();
splash.Show();
loadAndCheckDatabase();
splash.Close();
}
문제를 그래서 정말하지 않습니다 많은 스플래시 화면처럼 보입니다. 왜 그런가? 어떻게해야합니까?
보너스 포인트는 양식 작성, 사용 및 삭제시 발생하는 모든 일련의 이벤트에 대한 설명을 어디서 찾을 수 있는지 알고 있습니까? 위의 문제는 물건의 순서 나 양식 이벤트에 연결될 위치를 이해하지 못하기 때문일 수 있습니다.
UPDATE 닫기,하지만 확실히하지 : 좀 더 조언을 찾고. 여기에 현재 코드는 다음과 같습니다가 자동으로 내가 제어하지 않는 코드 true
로 설정되어 있기 때문에
private SplashScreen splash = new SplashScreen();
private void RealForm_Load(object sender, EventArgs e)
{
splash.Show();
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler
(worker_RunWorkerCompleted);
worker.RunWorkerAsync();
this.Visible = false;
}
void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
splash.Close();
this.Visible = true;
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
loadAndCheckDatabase();
}
는 불행하게도,
this.Visible = false
는 아무것도하지 않습니다. 그래서이 문제를 해결하기 위해
this.Visible = false
을 양식의
Shown
이벤트 처리기에 넣었습니다. 그러나 아마 추측 할 수 있듯이, 두 번째 분할에 대한 양식을 볼 수 있습니다 ... 그래서 이것은 정말 좋은 해결책은 아닙니다.
부하 처리기에있는 동안 작업자 스레드에서 대기 할 수있는 방법이 있습니까?
이것은 분명 할 수 있지만 loadAndCheckDatabase 호출에는 UI 코드가 없으며 메시지 상자가 없거나 문제가 발생할 수 있습니다. –
나는 Application.DoEvents()로 신경 쓰지 않고 그냥 BackgroundWorker를 사용한다. UI가 응답하는 동안 간단한 논리 단위를 실행하려면 BackgroundWorker를 사용하십시오. UI 스레드가 UI의 메시지 대기열에서 기다리고있는 모든 것을 실행하기를 원하는 경우 * 사용자가 마우스 클릭을 큐에 넣으면 다른 방식으로 임의의 논리를 수행하여 현재 작업을 방해 할 수 있습니다. 스레드로드가 실행되고 있지만 실제로는 하나만있는 경우 Application.DoEvents()를 사용하십시오. –