我有这个应该在运行时更新其任务栏图标的应用程序。 我试图通过更改应用程序的主窗口图标来执行此操作,如下所示:
var image = new WebClient().DownloadData("url_of_an_ico.ico");
this.Icon = App.Current.MainWindow.Icon = (BitmapSource)new ImageSourceConverter().ConvertFrom(image);
其中this
是MainWindow
。上面的代码是在按钮点击时执行的。它会更新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
配置构建时,任务栏图标似乎按预期更新...这让我更加困惑。
答案 0 :(得分:1)
似乎我错过了一条重要线索:使用ClickOnce
部署了不想更改任务栏图标的应用程序。
经过近一天的调试/试验后,我注意到如果将应用程序文件(.exe
和任何其他依赖项)移动到另一个文件夹,一切都会按预期开始工作。
为了解决这个问题,在不删除ClickOnce部署机制的情况下,我创建了一个方法,该方法在应用程序的Main
方法中调用,该方法执行以下操作:
%localappdata%\Apps
)复制到另一个位置,在我的情况下是%appdata%
内的文件夹; 另一种我认为合适的解决方案是将ClickOnce放在一起。选择其他部署机制将为您节省大量时间和精力。
希望这会对某人有所帮助。