public UnhandledExceptionHelper(Calculator calc) { if (!AppDomain.CurrentDomain.IsDefaultAppDomain()) { throw new InvalidOperationException("This implementation can only be used in the default AppDomain"); } if (!s_initialized) { s_domains = new Dictionary<AppDomain, AddInToken>(); AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); } AddInController controller = AddInController.GetAddInController(calc); s_domains.Add(controller.AppDomain, controller.Token); }
private static bool RunCalculator(Calculator calc) { if (calc == null) { //No calculators were found, read a line and exit Console.ReadLine(); } UnhandledExceptionHelper.LogUnhandledExceptions(calc); Console.WriteLine("Available operations: " + calc.Operations); Console.WriteLine("Type \"exit\" to exit, type \"reload\" to reload"); String line = Console.ReadLine(); while (!line.Equals("exit")) { if (line.Equals("reload")) { return true; } //We have a very simple parser, if anything unexpected happens just ask the user to try again. try { Command c = new Command(line); Console.WriteLine(calc.Operate(new MyOperate(c.Action, c.A, c.B))); } catch { Console.WriteLine("Invalid command: {0}. Commands must be formated: [number] [operation] [number]", line); Console.WriteLine("Available operations: " + calc.Operations); } line = Console.ReadLine(); } return false; }