#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);