我已经搜索了许多不同的职位做创建吐司通知从一个赢的形式,但当这些通过我得到一个错误时,生成toast通知。
System.Exception:未找到元素。(HRESULT异常:0x80070490)。
我已经编辑了csproj文件并添加了以下内容:
<PropertyGroup>
<TargetPlatformVersion>10.0.10586</TargetPlatformVersion>
</PropertyGroup>
并根据Windows.UI.Notifications is missing中的建议,添加了Windows.Data
和Windows.UI
的参考,以及System.Runtime.dll
的参考
using Windows.Data.Xml.Dom;
using Windows.UI.Notifications;
using System.Windows.Forms;
using System;
namespace ToastNotify
{
class Notify
{
public void GenerateToast(string header, string content)
{
ToastTemplateType toastTemplate = ToastTemplateType.ToastImageAndText02;
XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);
XmlNodeList toastTextElements = toastXml.GetElementsByTagName("text");
toastTextElements[0].AppendChild(toastXml.CreateTextNode(header));
toastTextElements[1].AppendChild(toastXml.CreateTextNode(content));
XmlNodeList toastImageElements = toastXml.GetElementsByTagName("image");
((XmlElement)toastImageElements[0]).SetAttribute("src", "..\\..\\Resources\\icon.ico");
IXmlNode toastNode = toastXml.SelectSingleNode("/toast");
((XmlElement)toastNode).SetAttribute("duration", "long");
ToastNotification toast = new ToastNotification(toastXml);
try
{
ToastNotificationManager.CreateToastNotifier().Show(toast);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
}
我哪里做错了有什么建议吗?
3条答案
按热度按时间xbp102n01#
您应该为CreateToastNotifier明确提供
applicationId
。就像这样:
但我有一个坏消息。从Windows 10开始1709 WinForms应用程序就是不显示吐司通知。在此之前Show(toast)是工作的,但现在它既不会抛出异常,也不会显示任何toast通知。
我还在想办法。
正如Prateek Shrivastava所指出的,存在(新的)限制。
查看此处https://learn.microsoft.com/en-us/uwp/api/windows.ui.notifications.toastnotificationmanager.createtoastnotifier
更新日期:
以下是使用APP_ID创建设置的分步指南,以便通知可以在 * 所有 * Windows 10版本上工作:Send a local toast notification from desktop C# apps
更新日期:
它在Windows 10 1903中再次工作,无需安装。
6xfqseft2#
如果要显示图标,请使用This并确保设置的是Image(Icon)完整路径,否则只需传递null。
pb3skfrl3#
我需要在这里补充一下,因为我正在开发一个WinForms应用(.Net Framework 4.7*),它无法在GitHub构建工人上构建,因为在某个时候,吐司通知的支持被黑客入侵,并引用了一些奇怪的WinMetadata\Windows.*.winmd文件。
任何发现这个StackOverflow问题的人都有祸了。
您可能将.Net Framework 4.x作为目标,因为您正在Windows 7上使用Win Forms应用程序. .Net Framework 4.8 is supported,而Windows 7没有您可能正在寻找的类ToastNotifications。因此出现了问题。
我认为唯一的解决方案是in the updated answer that's most upvoted,它只是针对更现代的UWP框架,只会在Windows 10和更高版本上工作。但你仍然试图从一个框架发送吐司通知,而这个框架的设计并不支持它。在你的代码中的某个地方,你可能正在检查你运行的平台是否是Windows 10或更高版本。甚至没有一个编译器语句,直接使用C#或VB .NET。.Net Framework的设计初衷并不是这样的--它的目的是与平台无关的。
我唯一的建议是;为Windows 10+设置一个新的构建目标,并按照advice from Stephen设置您的项目。这应该是使WinForms实现整洁的Windows 10技巧的最简单的方法。