Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Showing a Windows 10 toast notification

I'm developing a program in C# (Visual Studio 2015) and I want to show a toast message to the user at a certain situation. I downloaded this code from the MSDN and it runs fine:

// Get a toast XML template
XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastImageAndText04);

// Fill in the text elements
XmlNodeList stringElements = toastXml.GetElementsByTagName("text");
for (int i = 0; i < stringElements.Length; i++)
{
    stringElements[i].AppendChild(toastXml.CreateTextNode("Line " + i));
}

// Specify the absolute path to an image
String imagePath = "file:///" + Path.GetFullPath("toastImageAndText.png");
XmlNodeList imageElements = toastXml.GetElementsByTagName("image");
imageElements[0].Attributes.GetNamedItem("src").NodeValue = imagePath;

// Create the toast and attach event listeners
ToastNotification toast = new ToastNotification(toastXml);
toast.Activated += ToastActivated;
toast.Dismissed += ToastDismissed;
toast.Failed += ToastFailed;

// Show the toast. Be sure to specify the AppUserModelId on your application's shortcut!
ToastNotificationManager.CreateToastNotifier(APP_ID).Show(toast);

After testing this code I wanted to implement it into my application. So I changed it up a little bit and tried to run it. The error messages:

The type "IReadOnlyList<>" is defined in a not referenced assembly. Add a reference to System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" (translated)

Same goes for IEnumerable<> and IReadOnlyList<>

The error come from these two lines:

for (int i = 0; i < stringElements.Length; i++)
{
    stringElements[i].AppendChild(toastXml.CreateTextNode("Line " + i));

I also tried adding the reference to System.Runtime. I downloaded it with NuGet (https://www.nuget.org/packages/System.Runtime/4.0.0/). After that the errors were gone, but now literaly every word in my code is cringled red with error like "System.Object is not defined" and so on (but it still runs when I start it!).

The only possible solution I can think of is that System.Runtime is already installed somewhere on my computer, and that 4.0.0 is the wrong version for my program. But I can't find it anywhere.

PS: It's a desktop-application, not a Windows-Store application.

like image 792
Bobface Avatar asked Aug 25 '15 21:08

Bobface


People also ask

What is a Windows 10 toast notification?

Toast notifications are similar to a popup message. These notifications provide time-sensitive information about events that occur while an application is running. Toast notifications appear in the foreground whether Windows is currently in desktop mode, displaying the lock screen, or running another application.

How do I add toast notifications?

You can display the toast notification with show() , as shown in the following example: Context context = getApplicationContext(); CharSequence text = "Hello toast!"; int duration = Toast.

What is a PC toast notification?

Windows 8 has a notification system similar to that implemented in mobile operation systems such as Android, IOS and Windows Phone. A Windows 8 Toast is a notification triggered by an application or the operating system itself that is displayed to thew user by way of a small pop-up notification.

Where should toast message appear?

Toast messages ensure that the use of the application is not interrupted while providing necessary information for the user. They have no notification sounds associated with them and don't appear in the notification centers on any platform, but appear at the bottom of the viewport by default.


1 Answers

I think it is the same problem as in this question You must add a reference to

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Facades\System.Runtime.dll

PS : If you have a Windows 10 only desktop app, you might want to use the new toast system, the code sample on MSDN uses the Windows 8 one. it works on W10 but does not have all the new features (Microsoft released an official NuGet package).

Edit : Since I can't comment, I will post the answer here :

The exception is because you need to provide an applicationId in CreateToastNotifier()

ToastNotificationManager.CreateToastNotifier("MyApplicationId").Show(toast);

It is the name that will be used in the action center to group your toasts (so in general, you put the name of your app). In Windows 8.1 it was needed to register your application Id (I think this was in the sample from the MSDN) but now you can just put the name of your app.

And the GetXml() is only for WinRT. In desktop you need to do like you did with the GetContent().

like image 83
k94ll13nn3 Avatar answered Sep 18 '22 04:09

k94ll13nn3