コード例 #1
0
ファイル: Program.cs プロジェクト: Oxigen2/Oxigen
        private static void SetScreenSaverPreviewMode(string previewHandle)
        {
            _bPreviewMode    = true;
            _screenSavers    = new PreviewScreenSaver[1];
            _screenSavers[0] = new PreviewScreenSaver(new IntPtr(long.Parse(previewHandle)), _logger);

            _logger.WriteTimestampedMessage("successfully started a preview screensaver.");
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: Oxigen2/Oxigen
        public static void TerminateApplication(bool bClickThroughPressed)
        {
            if (_bTerminationStarted)
            {
                return;
            }
            lock (_terminationObj)
            {
                // as long as _bTerminationStarted is only being accessed within a thread
                // by a locked _terminationObj, it doesn't matter if we check it's value first and set its value
                // second or sets its value first and check its value second
                if (_bTerminationStarted)
                {
                    return;
                }

                _bTerminationStarted = true;
            }

            _clickThroughPressed = bClickThroughPressed;
            if (_bPreviewMode)
            {
                PreviewScreenSaver pss = (PreviewScreenSaver)_screenSavers[0];
                pss.Dispose();

                Application.Exit();
                return;
            }

            foreach (ScreenSaver screensaver in _screenSavers)
            {
                screensaver.FadeToDesktop();
            }

            bool atleastOneThreadsRunning = true;

            while (atleastOneThreadsRunning)
            {
                atleastOneThreadsRunning = false;
                foreach (ScreenSaver screensaver in _screenSavers)
                {
                    if (screensaver.SelectAndLoadThreadRunning)
                    {
                        atleastOneThreadsRunning = true;
                        break;
                    }
                }
                if (atleastOneThreadsRunning)
                {
                    Application.DoEvents();
                }
            }

            foreach (ScreenSaver screensaver in _screenSavers)
            {
                screensaver.ReleaseForms();
            }

            // if spacebar was hit, pop up browser windows and write click logs

            if (_clickThroughPressed)
            {
                ClickThroughPressed();
            }

            WriteLogs(true);

            // dispose of all forms, for each monitor
            foreach (ScreenSaver screensaver in _screenSavers)
            {
                // in preview mode, the form is closed when user presses OK, Cancel or Preview,
                // and raising the OnClose event again here would result in an infinite loop with TerminateApplication.

                screensaver.Close();

                _logger.WriteTimestampedMessage("successfully closed forms.");

                screensaver.DisposeForms();

                _logger.WriteTimestampedMessage("successfully disposed all screen saver objects.");
            }

            // local cleanup
            _playlist = null;

            if (_logTimer != null)
            {
                _logTimer.Stop();
                _logTimer.Dispose();
                _logTimer = null;

                _logger.WriteTimestampedMessage("successfully disposed of log timer.");
            }

            if (_autoExecuteProgramTimer != null)
            {
                _autoExecuteProgramTimer.Stop();
                _autoExecuteProgramTimer.Dispose();
                _autoExecuteProgramTimer = null;

                _logger.WriteTimestampedMessage("successfully disposed of auto-execute program timer.");
            }
            if (_launchApp)
            {
                // start external process
                try
                {
                    Process.Start(_user.ProgramToRun);
                }
                catch
                {
                    _logger.WriteWarning("Could not start external process");
                }
                _logger.WriteTimestampedMessage("Exiting application.");
            }
            // exit application
            Application.Exit();
        }