public static void LoadExistingMission(string fileName)
        {
            var loadingDialog = new LoadingDialog {
                Owner = MainWindow.Instance
            };

            loadingDialog.Loaded += (s, e) => Utils.InvokeInNewThread(delegate
            {
                var mission        = Mission.FromFile(fileName);
                loadingDialog.Text = "Scanning";
                using (var unitSync = new UnitSync(Settings.Default.SpringPath))
                {
                    unitSync.LoadingStatusChanged += (se, ea) => loadingDialog.Text = ea.Data;
                    loadingDialog.Text             = "Loading Map";
                    mission.Map        = LoadMap(unitSync, mission.MapName);
                    loadingDialog.Text = "Loading Mod";
                    mission.Mod        = LoadMod(unitSync, mission.ModName);
                }

                loadingDialog.Text = "Finalizing";
                mission.PostLoad();
                Settings.Default.MissionPath = fileName;
                Settings.Default.Save();
                loadingDialog.Invoke(delegate
                {
                    loadingDialog.Close();
                    MainWindow.Instance.SavePath = fileName;
                    MainWindow.Instance.Mission  = mission;
                });
            });
            loadingDialog.ShowDialog();
        }
        public static void PromptForNewMission()
        {
            var dialog = new NewMissionDialog {
                Owner = MainWindow.Instance
            };

            dialog.ProgressBar.Visibility = Visibility.Visible;
            Utils.InvokeInNewThread(delegate
            {
                IEnumerable <string> modNames;
                IEnumerable <string> mapNames;
                using (var unitSync = new UnitSync(Settings.Default.SpringPath))
                {
                    modNames = unitSync.GetModNames();
                    mapNames = unitSync.GetMapNames();
                }
                dialog.Invoke(delegate
                {
                    dialog.MapList.ItemsSource    = mapNames;
                    dialog.ModList.ItemsSource    = modNames;
                    dialog.ProgressBar.Visibility = Visibility.Hidden;
                });
            });
            if (dialog.ShowDialog() == true)
            {
                MainWindow.Instance.SavePath = null;
                var mapName       = (string)dialog.MapList.SelectedItem;
                var gameName      = (string)dialog.ModList.SelectedItem;
                var missionName   = dialog.NameBox.Text;
                var loadingDialog = new LoadingDialog {
                    Owner = MainWindow.Instance
                };

                loadingDialog.Loaded += delegate
                {
                    Utils.InvokeInNewThread(delegate
                    {
                        Mission mission;
                        loadingDialog.Text = "Scanning";
                        using (var unitSync = new UnitSync(Settings.Default.SpringPath))
                        {
                            unitSync.LoadingStatusChanged += (s, e) => loadingDialog.Text = e.Data;
                            loadingDialog.Text             = "Loading Map";
                            var map            = LoadMap(unitSync, mapName);
                            loadingDialog.Text = "Loading Mod";
                            var mod            = LoadMod(unitSync, gameName);
                            mission            = new Mission(missionName, mod, map);
                        }

                        dialog.Invoke(delegate
                        {
                            MainWindow.Instance.Mission = mission;
                            loadingDialog.Close();
                        });
                    });
                };
                loadingDialog.ShowDialog();
            }
        }