Я использовал решение, предложенное Фредриком Мёрком. Это очень ясно и элегантно.
В противном случае я обнаружил проблему, если мы создали экземпляр всплывающей формы перед запуском реального приложения (application.run (mainform ...)):
это вызывает исключение invalidOprationException, вызванное дескриптором формы, все еще не существующим в вызывающем потоке.
Чтобы создать дескриптор непосредственно в потоке t (и пропустить это исключение!), Попробуйте запустить всплывающую форму следующим образом:
Thread t = new Thread(new ThreadStart(delegate
{
_splash = new Splash();
Application.Run(_splash);
}));
t.Start();
и, если вы планируете вызывать метод closeSplash в нескольких ветвях программы, принудительно установите нулевое значение после первого вызова:
private static Splash _splash = null;
public static void CloseSplash()
{
if (_splash!= null)
{
_splash.CloseSplash();
_splash=null;
}
}