C# MDI WinForm应用程序的奇怪任务栏行为

C# MDI WinForm应用程序的奇怪任务栏行为,c#,winforms,mdi,taskbar,mdiparent,C#,Winforms,Mdi,Taskbar,Mdiparent,总之,我已经完成了MDI WinForm应用程序的一半以上,并且已经开始在几个不同的机器上测试我们到目前为止所拥有的,并且我在所有机器(运行Windows 7/Vista)上都发现了以下错误。错误与任务栏以及任务栏中应用程序的可视活动状态有关。使用图像将更容易: 我将鼠标悬停在任务栏上,准备启动 B.我点击应用程序,它不会启动任何问题,并显示在任务栏中-目前为止一切正常 C.等待大约三秒钟,图标会逐渐消失为不活动状态,因此当我单击它时,它会启动我的应用程序的另一个实例,而不是恢复我刚刚打开的

总之,我已经完成了MDI WinForm应用程序的一半以上,并且已经开始在几个不同的机器上测试我们到目前为止所拥有的,并且我在所有机器(运行Windows 7/Vista)上都发现了以下错误。错误与任务栏以及任务栏中应用程序的可视活动状态有关。使用图像将更容易:

我将鼠标悬停在任务栏上,准备启动

B.我点击应用程序,它不会启动任何问题,并显示在任务栏中-目前为止一切正常

C.等待大约三秒钟,图标会逐渐消失为不活动状态,因此当我单击它时,它会启动我的应用程序的另一个实例,而不是恢复我刚刚打开的实例!?一旦我点击表单并最小化然后恢复表单,这个问题就会消失

这很奇怪,我不知道如何着手修复它。这在使用.exe文件启动应用程序时也会表现出来,在单击应用程序主窗体之前,任务栏根本不会显示。我真的被难住了。如果有人知道这里会发生什么,我们将不胜感激?谢谢你抽出时间


注意。我已经把问题缩小到其他开放表单后面的表单。我使用了相关选项
this.TopLevel=true显示在窗体
事件等。但似乎什么都不起作用…

我看到了一个类似的问题,即应用程序在首次启动时不会聚焦,并且在您单击它以激活主窗体之前不会显示在windows 7任务栏中

我始终无法找到真正的原因,但将表单的文本属性设置从OnLoad覆盖移动到构造函数,解决了这个问题。非常奇怪,我仍然不知道为什么会发生这种事,这让我很烦


不确定这是否适用于您,但我很想知道您是否也在构造函数之外设置文本。

我看到了一个类似的问题,即应用程序在首次启动时无法聚焦,并且在您单击它以激活主窗体之前不会显示在windows 7任务栏中

我始终无法找到真正的原因,但将表单的文本属性设置从OnLoad覆盖移动到构造函数,解决了这个问题。非常奇怪,我仍然不知道为什么会发生这种事,这让我很烦

不确定这是否适用于您,但我很想知道您是否也在构造函数之外设置文本。

All

通过添加

this.Activate();
在主窗体(MDI父窗体)的
finally
块中显示
事件

谢谢你的时间和帮助。

所有

通过添加

this.Activate();
在主窗体(MDI父窗体)的
finally
块中显示
事件


谢谢你的时间和帮助。

谢谢你的帖子。我仍在发展中,希望有人会有一套解决方案,这将是一个已知的问题。情况可能并非如此!当我在开发过程中放慢速度时,我将开始一些详细的测试,其中将包含您的上述建议。谢谢你的时间,我会随时通知你…我在加载事件中做的一件事是加载MDI儿童,我将测试这件事的意义,并让你知道…谢谢你的帖子。我仍在发展中,希望有人会有一套解决方案,这将是一个已知的问题。情况可能并非如此!当我在开发过程中放慢速度时,我将开始一些详细的测试,其中将包含您的上述建议。感谢您的时间,我会随时通知您……我在加载事件中所做的一件事是加载MDI儿童,我将测试这件事的重要性,并让您知道……嗯,这是一个解决方法,而不是解决方案。您需要为此烦恼,当您必须编写这样的代码时,还有其他一些事情可能会出错。从严格测试Windows+L键(锁定工作站)开始,确保您的UI不会死锁。如果这是原因的话,请使用.NET中对闪屏的内置支持。@HansPassant谢谢你的建议。我不确定在现阶段会出现什么问题。我现在开发了许多MDI应用程序,但从未遇到过这种行为。我会留意以上的意见。如果“Windows+L”没有引起任何问题,那么可以认为我已经脱离困境了吗?我用的是我自己的闪屏,但我以前用过这种方法,没有副作用。再次感谢您的评论,非常感谢……”我猜“我正在使用自己的splashscreen”。这是一个非常强烈的暗示,你是在掩盖一个真正的问题。我已经开发了一个闪屏,可以很好地与其他应用程序配合使用,因此没有任何迹象表明这是导致这个问题的原因。“我会把它拿走,看看会发生什么……”HansPassant只是想让你知道(如果你感兴趣的话)。我从上面删除了
Activte()
关键字,希望问题会再次出现,但它没有!?我已经在其他机器上对此进行了检查(在我输入
Activate()
关键字之前出现了问题),这些机器现在也可以工作了!?我已经删除了启动屏幕,它没有任何区别(这个测试现在显然是重复的)。在我看来,代码隐藏(图形内容)可能包含一个bug,该bug通过包含
Activate()
关键字得到修复(永久修复)。嗯,这是一个解决方法,而不是解决方案。您需要为此烦恼,当您必须编写这样的代码时,还有其他一些事情可能会出错。从严格测试Windows+L键(锁定工作站)开始,确保您的UI不会死锁。如果这是原因的话,请使用.NET中对闪屏的内置支持。@HansPassant谢谢你的建议。我不确定在现阶段会出现什么问题。我现在开发了许多MDI应用程序