Windows 10 中来自桌面应用程序的 Toast 通知中的意外行为
Unexpected behaviours in toast notification from desktop app in Windows 10
我从 Windows 8.1 开始使用桌面应用程序的 toast 通知,但在 Windows 10 中使用新的操作中心,我遇到了一些意外行为。
当用户对 toast 不做任何操作时,它会直接消失而无需前往操作中心(ToastNotification.Dismissed
是 ToastDismissalReason.TimedOut
)。我不知道这是否与我在 win32 应用程序中使用它有关,但 Windows 通用应用程序中的相同 toast 在超时时会转到操作中心。
需要注意的一件事是我没有像 W8.1 中那样为我的 win32 应用程序注册 AppUserModelID,它似乎不再是强制性的。我仍然使用注册的 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);
}
}
}
感谢您的帮助。
编辑:我在涵盖该主题的 the msdn blog post 上发布了这个错误,我得到确认它应该在超时时保留在操作中心并且它可能是一个错误。
Win32 应用程序需要设置一个 COM 服务器,以便在操作中心持久保存 toasts: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
。
我从 Windows 8.1 开始使用桌面应用程序的 toast 通知,但在 Windows 10 中使用新的操作中心,我遇到了一些意外行为。
当用户对 toast 不做任何操作时,它会直接消失而无需前往操作中心(ToastNotification.Dismissed
是 ToastDismissalReason.TimedOut
)。我不知道这是否与我在 win32 应用程序中使用它有关,但 Windows 通用应用程序中的相同 toast 在超时时会转到操作中心。
需要注意的一件事是我没有像 W8.1 中那样为我的 win32 应用程序注册 AppUserModelID,它似乎不再是强制性的。我仍然使用注册的 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);
}
}
}
感谢您的帮助。
编辑:我在涵盖该主题的 the msdn blog post 上发布了这个错误,我得到确认它应该在超时时保留在操作中心并且它可能是一个错误。
Win32 应用程序需要设置一个 COM 服务器,以便在操作中心持久保存 toasts: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
。