Virtu/Library/Wpf/ApplicationBase.cs

66 lines
1.9 KiB
C#

using System;
using System.Diagnostics;
using System.Security;
using System.Text;
using System.Windows;
using System.Windows.Threading;
namespace Jellyfish.Library
{
public abstract class ApplicationBase : Application
{
[SecurityCritical]
protected ApplicationBase() :
this(null)
{
}
[SecurityCritical]
protected ApplicationBase(string name)
{
Name = name;
DispatcherUnhandledException += OnApplicationDispatcherUnhandledException;
AppDomain.CurrentDomain.UnhandledException += OnAppDomainUnhandledException;
}
private string GetExceptionCaption(string title, bool isTerminating = false)
{
var caption = new StringBuilder();
if (!string.IsNullOrEmpty(Name))
{
caption.Append(Name).Append(' ');
}
caption.Append(title);
if (isTerminating)
{
caption.Append(" (Terminating)");
}
return caption.ToString();
}
private void OnApplicationDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
MessageBox.Show(e.Exception.ToString(), GetExceptionCaption("Application Dispatcher Exception", isTerminating: true));
if (Debugger.IsAttached)
{
Debugger.Break();
}
e.Handled = true;
Shutdown();
}
private void OnAppDomainUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
MessageBox.Show(e.ExceptionObject.ToString(), GetExceptionCaption("AppDomain Exception", e.IsTerminating));
if (Debugger.IsAttached)
{
Debugger.Break();
}
}
public string Name { get; private set; }
}
}