protected override void Parse()
        {
            analyser = new HalfLifeDemoAnalyser((HalfLifeDemo)demo, (IAnalysisWindow)this, progressWindowInterface);

            try
            {
                analyser.Parse();
            }
            catch (ThreadAbortException)
            {
                throw;
            }
            catch (Exception ex)
            {
                GameLogWrite("*** Error ***", Brushes.Red);
                String errorMessage = "Error analysing demo.";

                if (demo.Status == Demo.StatusEnum.CorruptDirEntries)
                {
                    errorMessage += " Since the demo is marked as having corrupt directory entries, this is to be expected. As a result, the analysis may be incomplete.";
                }

                progressWindowInterface.Error(errorMessage, ex, false, null);
            }

            ParsingFinished(analyser.Players, analyser.Rounds, analyser.Players);
        }
        protected override void Parse()
        {
            analyser = new HalfLifeDemoAnalyser((HalfLifeDemo)demo, (IAnalysisWindow)this, progressWindowInterface);

            try
            {
                analyser.Parse();
            }
            catch (ThreadAbortException)
            {
                throw;
            }
            catch (Exception ex)
            {
                GameLogWrite("*** Error ***", Brushes.Red);
                String errorMessage = "Error analysing demo.";

                if (demo.Status == Demo.StatusEnum.CorruptDirEntries)
                {
                    errorMessage += " Since the demo is marked as having corrupt directory entries, this is to be expected. As a result, the analysis may be incomplete.";
                }

                progressWindowInterface.Error(errorMessage, ex, false, null);
            }

            ParsingFinished(analyser.Players, analyser.Rounds, analyser.Players);
        }