Настольное приложение на C# показывает уведомления только несколько раз в Windows 10

#c# #windows #desktop-application

Вопрос:

Итак, я создал приложение на C#, которое отправляет пользовательское всплывающее уведомление, сделанное на основе предоставленных аргументов. И это прекрасно работает в Windows 11, а в Windows 10 только в моей системе.

Для других пользователей уведомление появляется только иногда, а иногда оно вообще не появляется или появляется через долгое время в центре действий.

Вот репо для приложения: https://github.com/deathcrafter/Raintoaster

Я пробовал разные версии .NET Framework, в том числе 4.6.1(самая низкая) и 4.8. Кажется, все работает нормально для моего ПК с Windows 10 и пользователей, у которых на пк запущена сборка Windows 11 insider. Но не для других устройств с Windows 10.

Может ли кто-нибудь указать на то, что я делаю неправильно, или на то, что может быть причиной этого.

P.S.: Недавно я понизил рейтинг с Windows 11 до Windows 10 с чистой установкой, что может быть причиной того, что это работает для меня.

Заранее спасибо, death.crafter

Выписка из кода:

 public static void Main(string[] args)
    {
        // Check if app was activated from toast
        bool m = ToastNotificationManagerCompat.WasCurrentProcessToastActivated();
        if (!m)
        {
            // Parse arguments and create toast
            ParseArguments(args);
        }
        else
        {
            bool done = false;
            Process rainmeter = new Process();

            // Listen to notification activation
            ToastNotificationManagerCompat.OnActivated  = toastArgs =>
            {
                // Obtain the arguments from the notification
                ToastArguments ar = ToastArguments.Parse(toastArgs.Argument);

                // Obtain any user input (text boxes, menu selections) from the notification
                ValueSet userInput = toastArgs.UserInput;

                string[] programArgs = ar["arguments"].Split(new string[] { "|" }, 2, StringSplitOptions.RemoveEmptyEntries);

                rainmeter.StartInfo.FileName = programArgs[0];

                foreach (KeyValuePair<string, object> pair in userInput)
                {
                    string arg = pair.Value.ToString();
                    programArgs[1] = programArgs[1].Replace("$"   pair.Key   "$", arg.Replace("r", "n"));
                    programArgs[1] = programArgs[1].Replace("$"   pair.Key   ":CRLF$", arg.Replace("r", "#CRLF#"));
                }

                rainmeter.StartInfo.Arguments = programArgs[1];
                try
                {
                    rainmeter.Start();
                    done = true;
                }
                catch (SystemException exec)
                {
                    MessageBox.Show("Couldn't start program. Error: "   exec);
                    done = true;
                }
            };

            // Keep the app running until OnActivated event is raised and is completed
            while (!done)
                Thread.Sleep(100);
        }
    }