【问题标题】:Icon in Task Bar for ClickOnce Application Vanishes when App StartsClickOnce 应用程序任务栏中的图标在应用程序启动时消失
【发布时间】:2014-12-12 15:39:25
【问题描述】:

登录到我们的 ClickOnce 应用程序后,任务栏中的图标消失了。

一些细节:这个应用程序,我们称之为 ThisApp,最初是用 .NET 2.0 (VB) 编写的,并且已经向前迁移到 .NET 4.0 但是这个问题一直存在。在 Windows 7 中(我认为它在 Vista 和 XP 中做了同样的事情......)它的行为如下:

当您转到“开始”>“所有程序”>“ThisApp”并首次启动它时,该图标会按原样出现在任务栏中。您首先会看到一个登录屏幕。如果您输入正确的凭据,登录屏幕将被应用程序的实际 UI 取代,但与此同时,任务栏中的图标会消失。您仍然可以看到应用的 UI 屏幕,但任务栏图标不见了。

此时,如果您碰巧最小化了该应用程序,实际上没有办法将其恢复,只能再次转到 > 所有程序 > ThisApp,它会给您一个通知,上面写着“ThisApp 的一个实例是已经在运行”,但至少此时它会将图标恢复到任务栏。

如果在登录后并且图标丢失时,您碰巧点击了另一个窗口并将 ThisApp 发送到后台,则图标仍然丢失。但是,如果您随后单击 ThisApp 的窗口并将其拉回最前面,图标会突然返回到任务栏。

我已经在调试中逐步完成了初始登录过程。我查看了跟踪日志。我查看了 Windows 事件日志。我花时间在谷歌上。我找不到任何关于为什么会发生这种情况的线索。它已经持续了多年,从来没有成为一个足以保证任何开发人员时间的问题。但是现在(终于?)一个足够大的客户抱怨这个,我们需要最终解决这个问题。我发现了很多关于 ClickOne 应用程序及其图标的问题,但我没有找到解决这个特定问题的问题。

有人见过这样的吗?有没有处理过?有什么想法吗?

谢谢!!!

编辑 -- 更多信息:

我仍然对此感到困惑。以下是我能够弄清楚的:

第一:

当应用程序首次启动时,会在应用程序检查配置、测试与数据库的连接、加载用户缓存的数据等时显示启动页面。启动页面可见时,图标会很好地显示在任务栏中。初始设置完成后,启动页面将被隐藏。此时,任务栏图标消失。

第二:

在启动页面被隐藏后,登录表单被初始化并显示。显示时,该图标再次在任务栏中可见。它会一直留在那里,直到用户验证并关闭表单,此时图标再次从任务栏中消失。

第三:

登录表单一关闭,启动页面就会再次显示,同时完成更多配置并在应用程序(客户端)和服务器之间进行同步。显示启动页面时,任务栏图标会返回。同步完成后,启动页面将被隐藏,任务栏图标又消失了。

第四:

一旦第二个启动页面被隐藏,我们就会显示主窗体。此时,我希望任务栏图标再次显示。但是……它没有。我一直在比较登录表单和主表单的属性,看看它们变得可见,看看我是否能发现任何差异,这些差异可以解释为什么一个显示图标而另一个不显示。我没有看到任何明显的东西。

代码:

下面是创建和加载登录表单的代码的屏幕截图,箭头指向表单可见的行并且图标出现在任务栏中。

下面是创建和加载主窗体的代码的屏幕截图,箭头指向我希望任务栏图标出现的行。表单本身确实出现在这一行,但图标没有。

还有几件事:

  1. 图标在应用程序的属性中设置
  2. 在这两种形式中,ShowIcon 和 ShowInTaskbar 都是 true

欢迎任何想法!!!

【问题讨论】:

  • 您是否有任何理由将Visible 属性显式设置为True 而不是让它自动发生?
  • 好问题。那原本是不存在的。我只是添加它以查看它是否会使图标保持可见。它没有。但首先设置为假,然后设置为真——这就是诀窍。我不知道为什么。

标签: .net vb.net icons clickonce taskbar


【解决方案1】:

好吧,我不知道这里到底发生了什么。但我找到了一个暂时必须要做的解决方法......

Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.Load
    ' For some reason, the icon does not show in the taskbar when this form first shows.  The following is a workaround...
    Visible = False
    Visible = True
    ' End icon workaround
    InitTabs()
End Sub

【讨论】:

  • 什么是可见的;我假设它是一个布尔变量。在声明它时,您是说:Dim Visible as Boolean 还是说:Dim Visible as Boolean = True
  • 在此上下文中可见是我的可见属性。所以它相当于 frmMain.Visible 或 Me.Visible。
【解决方案2】:

可能你没有设置主窗体的属性来告诉它在任务栏中显示。

在 Windows 窗体中,属性是 ShowInTaskbar。所以你可以从设计器或构造器中设置它,你说 Me.ShowInTaskbar = true。

许多窗口概念从 WinForms 到 WPF 都被保留下来,因此该属性在 System.Windows 命名空间中的 Window 类上以相同的方式命名。

即使您有多个窗口并且希望每个顶级窗口都显示在任务栏中,您只需将 ShowInTaskbar 属性设置为 true。主窗口将使应用程序保持活动状态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多