-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathProgram.cs
64 lines (57 loc) · 2.18 KB
/
Program.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
using System;
using System.Reflection;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Threading;
using SheetReader.Wpf.Test.Utilities;
namespace SheetReader.Wpf.Test
{
internal static class Program
{
private static bool _errorShown;
[STAThread]
static void Main()
{
var app = new App();
TaskScheduler.UnobservedTaskException += OnUnobservedTaskException;
Application.Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;
app.InitializeComponent();
app.Run();
}
public static void ShowError(Window? window, Exception error, bool shutdownOnClose)
{
if (error == null || _errorShown)
return;
_errorShown = true;
var shutdown = false;
if (window == null)
{
MessageBox.Show(
"An error has occured: " + error.GetAllMessagesWithDots(),
Assembly.GetExecutingAssembly().GetCustomAttribute<AssemblyDescriptionAttribute>()?.Description,
MessageBoxButton.OK,
MessageBoxImage.Error);
}
else
{
MessageBox.Show(
window,
"An error has occured: " + error.GetAllMessagesWithDots(),
Assembly.GetExecutingAssembly().GetCustomAttribute<AssemblyDescriptionAttribute>()?.Description,
MessageBoxButton.OK,
MessageBoxImage.Error);
}
if (shutdownOnClose || shutdown)
{
Application.Current.Shutdown();
}
_errorShown = false;
}
private static void OnUnobservedTaskException(object? sender, UnobservedTaskExceptionEventArgs e) => ShowError(null, e.Exception, false);
private static void Current_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
e.Handled = true;
ShowError(null, e.Exception, false);
}
}
}