First off, as Carlo has said, you should move time-consuming work into a background thread, to free up your UI thread. Never use Application.DoEvents - if you have to, it's a good sign that you are doing something in totally the wrong way.
And I'd start it from the Form.Shown event as well rather than the Load:
private void Form1_Shown(object sender, EventArgs e)
{
BackgroundWorker work = new BackgroundWorker();
work.DoWork += work_DoWork;
work.RunWorkerCompleted += work_RunWorkerCompleted;
label4.Visible = true;
work.RunWorkerAsync();
}
void work_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
label4.Visible = false;
}
void work_DoWork(object sender, DoWorkEventArgs e)
{
StartPage();
}