РЕДАКТИРОВАТЬ 2
Хорошо, основываясь на совете из приведенных ниже ответов, я исключил подход с использованием потоков, и теперь моя программа выглядит следующим образом:
Program.cs
static void Main(){
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
FrmWWCShell FrmWWCShell = null;
var splash = new FrmSplash();
splash.SplashFormInitialized += delegate
{
FrmWWCShell = new FrmWWCShell();
splash.Close();
};
Application.Run(splash);
Application.Run(FrmWWCShell);
}
И FrmSplash.cs вот так:
public partial class FrmSplash : Form
{
public FrmSplash()
{
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
splashTimer.Interval = 1;
splashTimer.Tick +=
delegate { if (SplashFormInitialized != null) SplashFormInitialized(this, EventArgs.Empty); };
splashTimer.Enabled = true;
}
public event EventHandler SplashFormInitialized;
}
Проблема в том, что сейчас он вообще не работает. Заставка выскакивает на долю секунды, индикатор выполнения даже не инициализируется, а затем исчезает, пока я жду 10 секунд, пока не появится dll и основная форма, не глядя ни на что ...
Раскрась меня сильно растерялся сейчас!
ОРИГИНАЛЬНЫЙ ПОЧТА -> для справки
Я реализовал заставку «Загрузка приложения», которая работает в отдельном потоке, пока все dll загружаются, а форма становится «нарисованной». Это работает, как ожидалось. Странно то, что теперь, когда форма Splash закрывается, она отправляет мою основную форму обратно, если есть что-то еще открытое (, т.е. Outlook ). Я запускаю поток в Program.cs,
static class Program
{
public static Thread splashThread;
[STAThread]
static void Main()
{
splashThread = new Thread(doSplash);
splashThread.Start();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FrmWWCShell());
}
private static void doSplash()
{
var splashForm = new FrmSplash();
splashForm.ShowDialog();
}
}
А потом я заканчиваю его, как только происходит мое событие FrmSearch_Shown.
private void FrmSearch_Shown(object sender, EventArgs e)
{
Program.splashThread.Abort();
this.Show();
this.BringToFront();
}
Я, как вы можете видеть, пытался вызвать Show () и / или BringToFront () для FrmSearch, и он все еще " переходит " назад.
Чего мне не хватает?
Что еще можно попробовать?
Я делаю это настолько ужасно невежественным, что это мой процесс, который вызывает это?
Должен ли я подать заявление на досрочный выход на пенсию?
Спасибо за понимание!
РЕДАКТИРОВАТЬ 1
Я попытался установить для свойства TopMost в главной форме значение TRUE . Это удерживает мою форму от скрытия, но также не позволяет пользователю просматривать любое другое приложение. Кажется немного нарциссичным с моей стороны ...