我使用Microsoft。工具包。Uwp。通知。ToastContentBuilder可以在WinForms中为我的用户显示消息,它运行良好,但有时如果用户单击toast,显示toast的程序会再次启动,此外,如果应用程序关闭,则会通过单击toast再次启动。
我希望祝酒词只是发送一条信息,点击它什么都不做。任何帮助都将不胜感激。
这是我的代码
new ToastContentBuilder()
.AddText("testing")
.AddText("testing").SetToastDuration(ToastDuration.Long).Show();
对于UWP应用程序,您需要后台激活,但对于WinForms应用程序,如文档中所述,您需要处理前台激活,并且在不显示任何UI的情况下关闭应用程序。
对于桌面应用程序,后台激活由与前台激活相同(您的OnActivated事件处理程序将触发(。您可以选择不显示任何UI,然后关闭应用程序处理激活
因此,为了防止在应用程序关闭时点击吐司时显示,请执行以下步骤:
-
在
main
中,调用ToastNotificationManagerCompat。WasCurrentProcessToast activated((检查此实例是否是toast激活的实例(应用程序未运行,刚刚打开并激活以处理通知操作(,然后不显示任何窗口,否则显示主窗口。 -
同时处理ToastNotificationManagerCompat。OnActivated事件,并检查它是否是toast激活的实例,然后什么也不做,只退出应用程序。
示例-点击toast通知时停止再次打开应用程序
在下文中。NET 6示例中,我展示了一些消息框,以帮助您区分应用程序是toast激活的还是正在运行的实例。
using Microsoft.Toolkit.Uwp.Notifications;
using Windows.Foundation.Collections;
internal static class Program
{
[STAThread]
static void Main()
{
ApplicationConfiguration.Initialize();
//Handle when activated by click on notification
ToastNotificationManagerCompat.OnActivated += toastArgs =>
{
//Get the activation args, if you need those.
ToastArguments args = ToastArguments.Parse(toastArgs.Argument);
//Get user input if there's any and if you need those.
ValueSet userInput = toastArgs.UserInput;
//if the app instance just started after clicking on a notification
if (ToastNotificationManagerCompat.WasCurrentProcessToastActivated())
{
MessageBox.Show("App was not running, " +
"but started and activated by click on a notification.");
Application.Exit();
}
else
{
MessageBox.Show("App was running, " +
"and activated by click on a notification.");
}
};
if (ToastNotificationManagerCompat.WasCurrentProcessToastActivated())
{
//Do not show any window
Application.Run();
}
else
{
//Show the main form
Application.Run(new Form1());
}
}
}
要了解更多信息:
- 从C#应用程序发送本地toast通知