編集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;
}
問題は、それが現在まったく機能していないことです。スプラッシュ画面が一瞬ポップアップし、マークの進行状況バーが初期化されず、何も見つめずに dll とメイン フォームが表示されるまで 10 秒待っている間に消えます....
今ひどく混乱している私を着色してください!
元の投稿 - >参照用
すべての dll がロードされ、フォームが「ペイント」されている間、別のスレッドで動作する App Loading スプラッシュ スクリーンを実装しました。それは期待どおりに機能します。奇妙なのは、Splash フォームが終了すると、他に何か開いている場合 (つまり Outlook )、メインの Form が背面に送信されることです。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();
}
ご覧のとおり、FrmSearch で Show() および/または BringToFront() を呼び出してみましたが、それでも後ろに「ジャンプ」します。
私は何が欠けていますか?
他に何を試すことができますか?
私はこれをひどく無知にしているので、これを引き起こしているのは私のプロセスですか?
早期退職を申請する必要がありますか?
洞察をありがとう!
編集1
Main Form の TopMost プロパティをTRUEに設定してみました。これにより、フォームが非表示になることはありませんが、ユーザーが他のアプリを見ることもできなくなります。ちょっとナルシストっぽい…