public MainWindow()
 {
     InitializeComponent();
     programSession = new ProgramSession();
     programSession.OnMessageRaised += OnGameMessageRaised;
     DataContext = programSession;
 }
        private void Execute()
        {
            try
            {
                var             vm      = new ProgramSession(_user, WriteLine);
                IVirtualMachine program = _user.Programs[_programName];
#if DEBUG
                var sw = new Stopwatch();
                sw.Start();
#endif
                program.Run(vm);
#if DEBUG
                sw.Stop();
                Console.WriteLine("Run time: " + sw.ElapsedMilliseconds);
#endif
                WriteLine("-----");
                WriteLine("Returned: " + vm.Eax.Value.ToString(CultureInfo.InvariantCulture));
            }
            catch (LexicalErrorException e)
            {
                WriteLine("Lexical Error: " + e.Message);
            }
            catch (ParseErrorException e)
            {
                WriteLine("Parse Error: " + e.Message);
            }
            catch (ThreadAbortException)
            {
                WriteLine("Timeout of 5 seconds exceeded...");
            }
            catch (Exception e)
            {
                WriteLine("Error " + e.GetType().Name + ": " + e.Message + Environment.NewLine + "Stacktrace:" +
                          e.StackTrace);
            }
        }