Пример #1
0
        static WindowManager()
        {
            ChatWindows = new ConcurrentBag<ChatWindow>();
            GrowlWindow = new GrowlNotifications();
            _uiLagWindowThread = new Thread(() =>
            {
                UiLagWindow = new UiLagWindow();
                _uiLagWindowDispatcher = Dispatcher.CurrentDispatcher;
                System.Windows.Threading.Dispatcher.Run();
            });

            _uiLagWindowThread.Name = "Lag Window UI Thread";
            _uiLagWindowThread.SetApartmentState(ApartmentState.STA);
            _uiLagWindowThread.Start();
        }
Пример #2
0
        /// <summary>
        /// Must be ran on the UI thread
        /// </summary>
        public static void Shutdown()
        {
            Application.Current.MainWindow = null;
            try
            {
                if (UiLagWindow.IsLoaded)
                {
                    UiLagWindow.RealClose();
                }

            }
            catch (Exception e)
            {
                Debug.WriteLine(e);
            }
            UiLagWindow = null;
            _uiLagWindowDispatcher.BeginInvokeShutdown(DispatcherPriority.Normal);
            _uiLagWindowThread.Join();

            try
            {
                if (WindowManager.DebugWindow != null)
                    if (WindowManager.DebugWindow.IsLoaded)
                        WindowManager.DebugWindow.Close();
            }
            catch (Exception e)
            {
                Debug.WriteLine(e);
                if (Debugger.IsAttached) Debugger.Break();
            }
            try
            {
                foreach (var w in WindowManager.ChatWindows.ToArray())
                {
                    try
                    {
                        if (w.IsLoaded) w.CloseDown();
                        w.Dispose();
                    }
                    catch (Exception e)
                    {
                        Log.Warn("Close chat window error", e);
                    }
                }
                WindowManager.ChatWindows = new ConcurrentBag<ChatWindow>();
            }
            catch (Exception e)
            {
                Log.Warn("Close chat window enumerate error", e);
            }
            if (WindowManager.PlayWindow != null)
                if (WindowManager.PlayWindow.IsLoaded)
                    WindowManager.PlayWindow.Close();
        }