2 using System.Collections.Generic;
3 using System.Configuration;
5 using System.Diagnostics;
8 using System.Reflection;
10 using System.Threading.Tasks;
13 using Microsoft.Win32;
14 using Caliburn.Micro.Logging;
17 namespace Pithos.Client.WPF
20 /// Interaction logic for App.xaml
22 public partial class App : Application
24 private readonly log4net.ILog _log = log4net.LogManager.GetLogger(typeof (App));
28 log4net.Config.XmlConfigurator.Configure();
30 this.DispatcherUnhandledException += OnUnhandledException;
31 AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
32 TaskScheduler.UnobservedTaskException += OnUnobservedException;
34 InitializeComponent();
37 private void OnUnobservedException(object sender, UnobservedTaskExceptionEventArgs e)
39 var messages=new List<UserMessage>();
40 e.Exception.Handle(exc=>{
41 messages.Add(new UserMessage
43 Message = "Unexpected Exception",
44 Details = exc.ToString(),
45 Severity = Severity.Error
50 ShowMessages("Oops!","Where did that come from? \r\nErm, an exception occured.\r\nWe apologize for the inconvenience", messages);
54 private void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)
56 var message = e.IsTerminating
57 ? "Unexpected Exception. The application must terminate"
58 : "Unexpected Exception";
64 Message = (e.ExceptionObject as Exception).Message,
65 Details = e.ExceptionObject.ToString(),
66 Severity = Severity.Error
69 ShowMessages("Oops!", message,messages);
72 void OnUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
77 Message = e.Exception.Message,
78 Details = e.Exception.ToString(),
79 Severity = Severity.Error
82 ShowMessages("Oops!", "Unexcpected Exception", messages);
86 void ShowMessages(string title,string message,IEnumerable<UserMessage> messages )
88 LogMessages(messages);
89 Execute.OnUIThread(()=>{
90 var messageView = new MessageView(messages);
91 messageView.Title = title;
92 messageView.Message = message;
93 messageView.ShowDialog();
97 private void LogMessages(IEnumerable<UserMessage> messages)
99 var logMessage = CreateMessage(messages);
101 _log.Error(logMessage);
104 private static string CreateMessage(IEnumerable<UserMessage> messages)
106 var messageBuilder = messages.Aggregate(new StringBuilder("Unexpected Error\r\n"),
107 (builder, message) =>
109 builder.AppendFormat("\r\n[{0}] {1}\r\n{2}\r\n", message.Severity,
110 message.Message, message.Details);
113 var logMessage = messageBuilder.ToString();