Windows 10桌面应用的toast通知中的意外行为

本文关键字:意外 通知 toast 桌面 应用 Windows | 更新日期: 2023-09-27 18:07:32

我从Windows 8.1开始使用桌面应用程序的toast通知,但是随着Windows 10的新操作中心,我遇到了一些意想不到的行为。

当用户对toast不做任何操作时,它就会消失而不去操作中心(ToastNotification.DismissedToastDismissalReason.TimedOut)。我不知道这是否与我在win32应用程序中使用它有关,但同样的toast在Windows Universal应用程序中超时时会进入动作中心。

有一件事要注意的是,我没有为我的win32应用程序注册AppUserModelID,就像它在W8.1中需要的那样,它似乎不再是强制性的。我仍然使用已注册的id进行测试,并且遇到了相同的问题。

那么,我怎样才能防止吐司在超时时不进入动作中心呢?

下面是重现这个问题的极简代码(控制台应用程序):

using Windows.Data.Xml.Dom;
using Windows.UI.Notifications;
namespace ToastDesktop
{
    internal class Program
    {
        /// Add in the .csproj in the <PropertyGroup/> where <TargetFrameworkVersion/> is:
        /// <TargetPlatformVersion>10.0.10240.0</TargetPlatformVersion>
        ///
        /// Reference to add :
        /// - Windows.UI
        /// - Windows.Data
        private static void Main(string[] args)
        {
            string xml = $@"
                <toast>
                    <visual>
                        <binding template='ToastGeneric'>
                            <text>Some title</text>
                            <text>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</text>
                        </binding>
                    </visual>
                </toast>";
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(xml);
            ToastNotification toast = new ToastNotification(doc);
            toast.Tag = "tag";
            toast.Group = "group";
            ToastNotificationManager.CreateToastNotifier("ToastDesktop").Show(toast);
        }
    }
}

谢谢你的帮助。

编辑:我在msdn博客上发布了这个bug,我得到了确认,当超时时它应该留在动作中心,这可能是一个bug。

Windows 10桌面应用的toast通知中的意外行为

Win32应用程序需要设置一个COM服务器,以便在Action Center中持久化toast: http://blogs.msdn.com/b/tiles_and_toasts/archive/2015/10/15/quickstart-handling-toast-activations-from-win32-apps-in-windows-10.aspx

COM方法的另一种选择是为您的应用程序设置注册表项。在您的情况下,将irssi替换为ToastDesktop