在关闭不同线程(C#)时,在其他窗口后面发送的应用程序窗口
本文关键字:窗口 其他 应用程序 线程 | 更新日期: 2023-09-27 17:48:48
我正在用C#.NET 编写一个Windows窗体应用程序
启动时,应用程序会显示一个在单独线程中运行的启动屏幕。当启动屏幕显示时,主应用程序正在初始化。
一旦主应用程序完成初始化,就会显示应用程序的主窗体,并且启动屏幕仍然显示在顶部。
到目前为止一切都如预期。
然后,Splash屏幕关闭,导致该线程退出。出于某种原因,在这一点上,主应用程序窗口被发送到所有其他打开的窗口之后,尤其是在windows资源管理器窗口中,您首先单击了.exe文件来运行应用程序!
是什么原因导致窗户突然像这样"向后"跳?
当线程关闭时,尝试在主窗口上调用.Activate()。
它从未处于活动状态,因此Z阶较低,所以任何较高的值都会自然高于它。我不得不在我们的应用程序中修复这个确切的场景。
别忘了!您可能需要使用Invoke()将调用封送至正确的线程!
我有时也会遇到这种情况。Bob的回答是最简单的,在大多数情况下对我都有效。然而,有些时候我需要使用暴力。通过互操作这样做:
[DllImport("user32.dll")]public static extern bool SetForegroundWindow(IntPtr hWnd);
启动屏幕是模式对话框吗?
如果您通过设置DialogResult和调用Hide()或close()来两次关闭模态对话框,我已经看到这个窗口"跳跃"了。
代码如下:
private void button1_Click(object sender, System.EventArgs e)
{
this.DialogResult = DialogResult.Abort;
this.Hide();
}
查看此博客条目了解所有案例。。。
您可以使用以下代码:
private void button1_Click(object sender, System.EventArgs e)
{
this.DialogResult = DialogResult.Abort;
this.Hide();
}
谢谢大家!