WPF应用程序不会更新任务栏图标

时间:2018-05-17 10:41:18

标签: c# .net wpf icons

我有这个应该在运行时更新其任务栏图标的应用程序。 我试图通过更改应用程序的主窗口图标来执行此操作,如下所示:

var image = new WebClient().DownloadData("url_of_an_ico.ico");
this.Icon = App.Current.MainWindow.Icon = (BitmapSource)new ImageSourceConverter().ConvertFrom(image);

其中thisMainWindow。上面的代码是在按钮点击时执行的。它会更新Window图标(左上角的图标),但不会更新任务栏图标。

奇怪的是,我在另一个测试应用程序中尝试了完全相同的代码,并且工作得很好。

我在测试应用和我的应用之间看到的唯一区别是我手动定义了我的Main方法,我创建了应用实例。

[System.STAThreadAttribute()]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
    public static void Main(string[] args) 
    {
       var a = new App();
       a.InitializeComponent();
       a.Run();
    }

我见过有关重新启动explorer.exe和删除Windows'图标缓存的建议。他们似乎都没有帮助。

任何帮助都将受到高度赞赏。

更新 当使用Release配置构建时,任务栏图标似乎按预期更新...这让我更加困惑。

1 个答案:

答案 0 :(得分:1)

似乎我错过了一条重要线索:使用ClickOnce部署了不想更改任务栏图标的应用程序。

经过近一天的调试/试验后,我注意到如果将应用程序文件(.exe和任何其他依赖项)移动到另一个文件夹,一切都会按预期开始工作。

为了解决这个问题,在不删除ClickOnce部署机制的情况下,我创建了一个方法,该方法在应用程序的Main方法中调用,该方法执行以下操作:

  1. 检查应用程序是否是通过ClickOnce启动的,如果是:
  2. 将应用程序文件从“原始”ClickOnce文件夹(%localappdata%\Apps)复制到另一个位置,在我的情况下是%appdata%内的文件夹;
  3. 从上面创建的文件夹中启动流程;
  4. 杀死当前进程(由ClickOnce启动);
  5. 另一种我认为合适的解决方案是将ClickOnce放在一起。选择其他部署机制将为您节​​省大量时间和精力。

    希望这会对某人有所帮助。