protected override async Task <Window> Load(ILoadingView loadingView) { try { var replayClient = new ReplayClient(); Program.Client = replayClient; Program.IsHost = true; loadingView.UpdateStatus("Loading Replay.."); ReplayReader reader = null; ReplayEngine engine = null; try { reader = ReplayReader.FromStream(File.OpenRead(_replayPath)); engine = new ReplayEngine(reader, replayClient); loadingView.UpdateStatus("Loading Game..."); var game = GameManager.Get().GetById(reader.Replay.GameId); loadingView.UpdateStatus("Loading Game Engine..."); Program.CurrentOnlineGameName = game.Name; Program.GameEngine = new GameEngine(engine, game, reader.Replay.User); } catch { reader?.Dispose(); engine?.Dispose(); throw; } var dispatcher = Dispatcher.CurrentDispatcher; Window window = null; await dispatcher.InvokeAsync(() => { window = WindowManager.PlayWindow = new PlayWindow(); window.Closed += PlayWindow_Closed; window.Show(); }, DispatcherPriority.Background); return(window); } catch (UserMessageException) { throw; } catch (Exception e) { var msg = $"Error launching replay from {_replayPath}: {e.Message}"; Log.Warn(msg, e); throw new UserMessageException(UserMessageExceptionMode.Blocking, msg, e); } }