#Тосты WPF, возвращающие 2 исключения

#sql-server #wpf #toast #sqldependency

Вопрос:

Я использую ToastNotifcations для обработки обновлений, поступающих из моей базы данных через Посредника службы.

Использование:

 using TableDependency.SqlClient.Base.Enums;
using ToastNotifications;
using TableDependency.SqlClient;
using ToastNotifications.Lifetime;
using ToastNotifications.Messages;
using ToastNotifications.Position;
using System.Data.Entity.Core.EntityClient;
 

Код:

 private void _dependency_OnChanged(object sender, TableDependency.SqlClient.Base.EventArgs.RecordChangedEventArgs<Aircraft> e)
        {
            Notifier notifier = new Notifier(cfg =>
            {
                cfg.PositionProvider = new WindowPositionProvider(
                    parentWindow: Application.Current.MainWindow,
                    corner: Corner.BottomRight,
                    offsetX: 10,
                    offsetY: 10);

                cfg.LifetimeSupervisor = new TimeAndCountBasedLifetimeSupervisor(
                    notificationLifetime: TimeSpan.FromSeconds(3),
                    maximumNotificationCount: MaximumNotificationCount.FromCount(5));

                cfg.Dispatcher = Application.Current.Dispatcher;
            });

            if (e.ChangeType != ChangeType.None)
            {
                switch (e.ChangeType)
                {
                    case ChangeType.Update:
                        e.Entity.ToString();

                        Console.WriteLine(e.Entity.ACStatus.ToString());
                                             
                        notifier.ShowWarning("I AM WORKING");
                        
                        break;
                }
            }
        }
        private void Notify_Closing(object sender, CancelEventArgs e)
        {
            _dependency.Stop();
        }
 

Через консоль.WriteLine Я получаю свой хороший результат, однако, за notifier.ShowWarning следующими исключениями:

 Exception thrown: 'System.InvalidOperationException' in WindowsBase.dll
Exception thrown: 'System.Reflection.TargetInvocationException' in mscorlib.dll
 

Есть какие-нибудь идеи?

Комментарии:

1. В названии отсутствует буква «т».

2. Это не то, как вы читаете исключения. Вы всегда хотите знать строку, в которой она выбрасывается, и сообщение об исключении. Сообщение, скорее всего, расскажет, в чем дело, или, по крайней мере, даст вам ключ к разгадке. Запустите приложение в режиме отладки и позвольте отладчику остановиться. Это позволит вам проверить исключение. Перейдите в главное меню, откройте меню Отладки и выберите Параметры исключений. Убедитесь, что все исключения проверены (по крайней мере, исключения CLR). Затем запустите отладчик.

3. Ну, через несколько часов я обнаружил, что исключение было выдано в строке уведомления о тостах notifier.ShowWarning("I AM WORKING"); , для его запуска требуется диспетчер. Вот исправление: this.Dispatcher.Invoke(() => { notifier.ShowSuccess($"AC: {e.Entity.XXX.ToString()} Status Changed to {e.Entity.YYY.ToString()}.", options); }, DispatcherPriority.Background);