编辑 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();
}
如您所见,我尝试在 FrmSearch 上调用 Show() 和/或 BringToFront() ,但它仍然“跳”到后面。
我错过了什么?
我还能尝试什么?
我这样做是不是非常无知,以至于是我的过程导致了这种情况?
我应该申请提前退休吗?
感谢您的任何见解!
编辑 1
我尝试将主窗体上的 TopMost 属性设置为TRUE。这可以防止我的表单隐藏,但也可以防止用户查看任何其他应用程序。看来我有点自恋了……