Thank you!
The problem is pretty simple to see (it may be harder to work out a fix)
timer1.Stop();
Hide();
f3.ShowDialog();
Close();
ShowDialog is a modal or blocking call - it does not return until the form it is called on is closed. So no further events happen in your Form2 class until the instance of Form3 (the splash screen) has done it's job, and closed. So not progress display, not messages, no UI updates at all.
Instead of that, add a handler for the Form3.Closed event, and use that to Close Form2. Just use
f3.Show()
instead of
f3.ShowDialog()
and remove the Close after it - if you close form2 after displaying form3, it will also destroy the form3 instance, since it is declared as a form2 class level reference.